【问题标题】:Dealing with Security component in a CakePHP 2 test case在 CakePHP 2 测试用例中处理安全组件
【发布时间】:2012-01-01 06:35:27
【问题描述】:

我正在尝试测试一个 CakePHP 操作,该操作处理使用Security 组件保护的注册表单。我已经像这样在 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'));

但测试坚持使用POST 请求的Security 验证。我正在使用 CakePHP 2.0.3 和 PHPUnit 3.6.3。

顺便说一句,我没有直接使用UsersController,而是CakePHP 为我烘焙的TestUsersController 类(我认为是generate 方法的替代品)。

在测试用例中处理安全组件的正确方法是什么?

【问题讨论】:

    标签: security unit-testing cakephp post phpunit


    【解决方案1】:

    解决方案是模拟Users 控制器和User 模型,并对Security::_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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2019-06-14
      相关资源
      最近更新 更多