我正在为使用Zend Framework的当前项目编写测试。一切都很好,但是我在测试登录用户的操作/控制器时遇到了问题:我需要登录才能执行操作/控制器。
我该如何在PHPUnit中登录?
我正在为使用Zend Framework的当前项目编写测试。一切都很好,但是我在测试登录用户的操作/控制器时遇到了问题:我需要登录才能执行操作/控制器。
我该如何在PHPUnit中登录?
根据您的说法,您希望测试操作/控制器,我想您不是在编写单元测试,而是功能/集成测试-即,使用 Zend_Test
并通过MVC进行测试。
这里是我在一个项目中使用的测试函数,我正在测试登录是否正常:
public function testLoggingInShouldBeOk()
{
$this->dispatch('/login/login');
$csrf = $this->_getLoginFormCSRF();
$this->resetResponse();
$this->request->setPost(array(
'login' => 'LOGIN',
'password' => 'PASSWORD',
'csrfLogin' => $csrf,
'ok' => 'Login',
));
$this->request->setMethod('POST');
$this->dispatch('/login/login');
$this->assertRedirectTo('/');
$this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}
还有另一种方法。在我的User
实体中,我有一个login()
方法,它将用户的ID放入会话和静态变量中。在测试的setUp()
中,我只需要调用$user->login()
即可。在测试环境中,不使用会话(设置Zend_Session::$isUnitTested = true
即可),测试依赖于静态变量。只需记得在tearDown()
上清除静态变量(logout()
用户)。
我认为这篇文章可能会对您有所帮助: http://perevodik.net/en/posts/7/ 它描述了如何创建一个虚假身份,您可以使用该身份将环境设置为等同于用户已登录的状态。
就像Pascal使用这个函数一样:
$this->_getLoginFormCSRF();