Security 在CakePHP 2测试用例中处理安全组件
我正在尝试测试一个CakePHP操作,该操作处理一个注册表单,该表单由Security 在CakePHP 2测试用例中处理安全组件,security,unit-testing,cakephp,post,phpunit,Security,Unit Testing,Cakephp,Post,Phpunit,我正在尝试测试一个CakePHP操作,该操作处理一个注册表单,该表单由安全性组件保护。我在UsersController中配置了如下组件: public $components = array( 'Security' => array('unlockedFields' => array('password_again')), ); 我可以在浏览器中执行该操作,但每当我运行测试用例时,它就会失败,并显示以下消息: "The request has been black-holed
安全性
组件保护。我在UsersController中配置了如下组件:
public $components = array(
'Security' => array('unlockedFields' => array('password_again')),
);
我可以在浏览器中执行该操作,但每当我运行测试用例时,它就会失败,并显示以下消息:
"The request has been black-holed"
我已尝试通过几种方式禁用测试用例内部的验证:
$this->Users->Security->enable = false;
$this->Users->Security->validatePost = false;
$this->Users->Components->disable('Security');
$this->Users->Security = null; // desperate measure :)
// still fails
$this->testAction('/signup', array('data' => array(...), 'return' => 'contents'));
但是测试坚持使用Security
验证POST
请求。我使用的是CakePHP2.0.3和PHPUnit 3.6.3
顺便说一句,我不是直接使用userscoontroller
,而是CakePHP为我烘焙的testuserscoontroller
类(我认为是作为generate
方法的替代品)
在测试用例中处理安全组件的正确方法是什么?解决方案是模拟
用户
控制器和用户
模型,并对安全性做出预期::\u validatePost()
方法:
$this->Users = $this->generate(
'Users',
array(
'components' => array(
'Security' => array('_validatePost'),
),
'models' => array('User' => true),
)
);
$this->Users->Security->expects($this->any())
->method('_validatePost')
->will($this->returnValue(true));
解决方案是模拟
用户
控制器和用户
模型,并对安全性做出预期::_validatePost()
方法:
$this->Users = $this->generate(
'Users',
array(
'components' => array(
'Security' => array('_validatePost'),
),
'models' => array('User' => true),
)
);
$this->Users->Security->expects($this->any())
->method('_validatePost')
->will($this->returnValue(true));