我试图在我的一个控制器中测试授权,以确保只有某些用户才能访问某些操作。但是在运行测试时,永远不会调用AppController上的isAuthorized()方法。这就是方法的样子:
public function isAuthorized($user = null){
if(!isset($this->request->params['admin'])){
return true;
}
return in_array($user['role'], array('admin', 'root'));
}
我的测试功能:
public function testArticlesIndex() {
$this->generate('Articles', array(
'components' => array('Auth')
));
$this->testAction('/admin/articles', array('return' => 'view'));
$this->assertEmpty($this->view);
}
我尝试了很多嘲弄AuthComponent而不是嘲笑它的东西。我无法重现这种情况,这需要isAuthorized(),其中具有admin或root以外角色的用户尝试访问admin上的操作并失败。
答案 0 :(得分:0)
在模拟Auth组件而不定义要模拟的方法时,默认情况下会模拟所有方法。解决方案是模拟您想要模拟的特定AuthComponent方法:
$this->generate('Articles', array(
'components' => array(
'Auth' => array(
'redirect' // only mocks AuthComponent::redirect()
)
)
));
从书中可以看出:
您可以选择通过不向其传递方法来存根整个类, 比如上面例子中的Session。
请参阅:http://book.cakephp.org/2.0/en/development/testing.html#using-mocks-with-testaction