【发布时间】:2011-11-21 18:12:37
【问题描述】:
我正在尝试测试允许编辑用户配置文件的控制器操作。除其他外,我想测试每个登录用户只能编辑自己的个人资料,而不能编辑其他人的个人资料。如果违反此限制,则操作必须重定向到预定义的主页。
在这种情况下,我有一个夹具可以创建一个 ID = 1 的用户。所以我正在考虑以这种方式测试限制:
$data = $this->Users->User->read(null, 1);
$this->Users->Auth->login($data);
$this->testAction('/users/edit/2', array('method' => 'get'));
$url = parse_url($this->headers['Location']);
$this->assertEquals($url['path'], '/homepage');
测试通过了这个断言。所以下一步是检查执行'/users/edit/1',它有登录用户的ID,是否显示表单:
$this->testAction('/users/edit/1', array('method' => 'get', 'return' => 'vars'));
$matcher = array(
'tag' => 'form',
'ancestor' => array('tag' => 'div'),
'descendant' => array('tag' => 'fieldset'),
);
$this->assertTag($matcher, $this->vars['content_for_layout'], 'The edition form was not found');
但是这个断言失败了。在用debug() 挖掘之后,我发现$this->Auth->user() 返回整个信息,但$this->Auth->user('id') 返回null。由于我在操作中的比较中使用后者,它评估为假并导致
测试失败。
奇怪的是,它发生在测试时,而不是在浏览器中执行操作时。那么,测试这个动作的正确方法是什么?
谢谢!
【问题讨论】:
标签: php unit-testing cakephp authentication