Ste*_*her 10 php phpunit unit-testing zend-auth zend-acl
我有一个登录后面的应用程序,并使用zend_acl和zend_auth.
在预分派期间,我有一个ACL插件,可以为ACL创建所有规则.我还有一个Auth插件,用于检查您是否已登录,如果可以,则根据ACL访问所请求的资源.
由于应用程序完全在登录后面,因此只有在您登录时才会创建ACL.
单元测试这似乎是不可能的,或者更可能是我错过了一些明显的东西.
在我的单元测试设置方法中,我模拟了一个返回zend_auth实例的成功登录.通过的测试表明此登录成功.
但是,如果我然后通过测试尝试分派到另一个位置,或者评估登录用户是否可以访问给定资源,则它总是被插件拒绝,因为它们仍然没有登录.我不知道为什么这是,有人可以提供建议吗?
例如,这传递:
public function testLoggedIn()
{
$this->assertTrue( Zend_Auth::getInstance()->hasIdentity() );
}
Run Code Online (Sandbox Code Playgroud)
这失败了,因为它被插件拒绝了:
public function testUserAccess()
{
$this->dispatch('/home');
$this->assertResponseCode(200);
$this->assertQueryContentContains('#nav_side');
$this->resetRequest()
->resetResponse();
}
Run Code Online (Sandbox Code Playgroud)
这个,我发现似乎仍然会重定向回登录页面,因为插件不知道用户已登录.
任何帮助非常感谢.
您描述的问题在使用全局变量和 OOP 全局变量(单例模式)时经常发生。
PHPUnit 的作者写了一篇文章,描述了如何通过使用依赖注入来避免这种情况,以及您还有哪些其他可能性,因为它描述性很强,所以我建议您阅读它:) http://sebastian-bergmann .de/archives/882-Testing-Code-That-Uses-Singletons.html
作为一个丑陋的替代方案(如果您需要快速结果),您可以创建一个 Zend_Auth 存根(在链接中描述)并使用 PHP 5.3 反射 API 将 Zend_Auth 实例变量设置为您的存根。
希望有帮助(因为这个问题已经持续了 4 小时而没有其他答案)
| 归档时间: |
|
| 查看次数: |
3513 次 |
| 最近记录: |