Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在CakePHP 2测试用例中处理安全组件_Security_Unit Testing_Cakephp_Post_Phpunit - Fatal编程技术网

Security 在CakePHP 2测试用例中处理安全组件

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

我正在尝试测试一个CakePHP操作,该操作处理一个注册表单,该表单由
安全性
组件保护。我在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));