为在CakePHP 2中使用AuthComponent的控制器编写单元测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为在CakePHP 2中使用AuthComponent的控制器编写单元测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1855字,纯文字阅读大概需要3分钟。
内容图文
![为在CakePHP 2中使用AuthComponent的控制器编写单元测试](/upload/InfoBanner/zyjiaocheng/826/4358ba45821f489fba5ad147461c8a78.jpg)
我正在尝试测试允许编辑用户配置文件的控制器操作.除了我想测试的其他事情,每个登录的用户只能编辑自己的配置文件而不能编辑其他配置文件.如果违反此限制,操作必须重定向到预定义的主页.
在这种情况下,我有一个夹具,可以创建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.由于我在动作中进行比较时使用后者,因此将其评估为false并导致
测试失败.
奇怪的是,它是在测试时发生的,而不是在浏览器中执行操作时发生的.那么,测试这个动作的正确方法是什么?
谢谢!
解决方法:
实际的正确答案应该是使用模拟对象而不是实际手动登录用户:
$this->controller = $this->generate('Users', array(
'components' => array('Auth' => array('user')) //We mock the Auth Component here
));
$this->controller->Auth->staticExpects($this->once())->method('user') //The method user()
->with('id') //Will be called with first param 'id'
->will($this->returnValue(2)) //And will return something for me
$this->testAction('/users/edit/2', array('method' => 'get'));
使用模拟是测试控制器最简单的方法,也是最灵活的方法
2015年3月11日更新
您还可以模拟AuthComponent的所有方法
$this->controller = $this->generate('Users', array(
'components' => array('Auth') // Mock all Auth methods
));
内容总结
以上是互联网集市为您收集整理的为在CakePHP 2中使用AuthComponent的控制器编写单元测试全部内容,希望文章能够帮你解决为在CakePHP 2中使用AuthComponent的控制器编写单元测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。