如何修复 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单元
我通过模拟 Session
和 Auth
组件解决了这个问题。我在测试中创建控制器 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
标记的测试才能使会话正常工作。
参考文献:
我得到 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单元
我通过模拟 Session
和 Auth
组件解决了这个问题。我在测试中创建控制器 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
标记的测试才能使会话正常工作。
参考文献: