我正在为ZF1应用程序编写测试,这是我的控制器的初始化:
public function init()
{
$this->_redirector = $this->_helper->getHelper('Redirector');
$action = $this->getRequest()->getActionName();
if(!in_array($action,array('login','logout'))) {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
// Identity exists; get it
$identity = $auth->getIdentity();
} else {
$this->_redirector->gotoUrl('/hr/index/login?redirect='.urlencode($this->getRequest()->getRequestUri()));
}
}
$this->_user = AdminUserQuery::create()->findOneByUsername($identity);
$this->view->user = $this->_user;
...
}
和有问题的测试:
public function testNoAuthGivesLogin() {
$this->dispatch('/hr');
$this->assertRedirectTo( '/hr/index/login?redirect=%2Fhr' );
}
简单...基本上如果没有auth,重定向到登录。这在浏览器中有效,但在phpUnit中,它继续执行重定向后的代码,这意味着在它下面设置的属性不存在,特别是$ this-> _user,所以在我的索引操作中,当它调用getId时()$ this-> _user,它会抛出错误
如果我检测到重定向,如果我添加die()或exit()甚至$ this-> _redirector-> setExit(true),我如何告诉phpUnit停止执行代码?它完全停止了phpUnit会话,没有测试运行。
答案 0 :(得分:0)
您可能会发现代码在浏览器中继续执行,您只是看不到错误。我相信你想要使用gotoUrlAndExit()
。