如何修复 cakephp 2 和 phpunit4 up 中的 mocking auth 错误?

How to fix mocking auth error in cakephp 2 and phpunit4 up?

我得到 Static method "user" cannot be invoked on mock object 甚至没有嘲笑 auth->user

我正在使用 php7、cakephp2.x 和 phpunit4+ 根据 cakephp2 文档:

https://book.cakephp.org/2.0/en/development/testing.html
If you are using PHPUnit 4 or 5, staticExpects() does not exist anymore. Instead, you should insert the necessary data into the session with CakeSession::write('Auth.User', $user) before calling the action.

我尝试使用:

$user = [
  'id' => 1,
  'username' => 'mark'
];

CakeSession::write('Auth.User', $user);

但是调用时:

$user = $this->Controller->Auth->user();

我仍然得到: Static method "user" cannot be invoked on mock object错误

我肯定在这里遗漏了一些东西,但我不知道是什么。你能帮我找到正确的方法吗?

谢谢

我是运行宁:

  • PHP 7.3.9
  • 蛋糕PHP 2.10.16
  • PHP5.7.27单元

我通过模拟 SessionAuth 组件解决了这个问题。我在测试中创建控制器 setUp 是这样的:

<?php
App::uses('CakeSession', 'Model/Datasource');

class MyIntegrationTestCase extends ControllerTestCase
{
  protected $ctrl;

  public function setUp()
  {
    parent::setUp();

    // https://api.cakephp.org/2.10/class-ControllerTestCase.html#_generate
    $mocks = [
      'components' => [
        'Session',
        'Auth',
      ]
    ];
    $this->ctrl = $this->generate('Quotes', $mocks);

    $user = [
      'id' => 1,
      'username' => 'alistaircol',
    ];
    CakeSession::write('Auth.User', $user);
  }
}

不能 100% 确定您是否需要在项目中模拟 Auth 组件,但没有这个我得到了 302。不知道这是否是我项目中的非标准内容。

此外,您可能需要 运行 带有 --stderr 标记的测试才能使会话正常工作。

参考文献: