我正在编写Zend Framework应用程序并正在使用PHPUnit进行测试。我的问题是,有一小部分代码,其中重定向器操作助手在我的开发和测试环境之间表现不同。
以下是代码:
if($user == NULL) {
$this->_logger->info('EMAIL NOT FOUND!');
$this->_flash->addMessage('User not found');
$this->_helper->redirector('index', 'index');
$this->_logger->info('SHOULD NEVER GET TO THIS LINE!');
}
当我在开发环境中的浏览器中运行它时,我得到以下日志条目:
2011-08-02T09:51:58+10:00 INFO (6): Controller: Myapplication_UserController
2011-08-02T09:51:58+10:00 INFO (6): EMAIL NOT FOUND!
2011-08-02T09:51:58+10:00 INFO (6): Controller: Myapplication_IndexController
2011-08-02T09:51:58+10:00 INFO (6): Service: Myapplication_Service_Authentication
完美。但是,当我的PHPUnit测试运行它时,我得到这些日志条目:
2011-08-02T09:52:39+10:00 INFO (6): Controller: Myapplication_UserController
2011-08-02T09:52:39+10:00 INFO (6): EMAIL NOT FOUND!
2011-08-02T09:52:39+10:00 INFO (6): SHOULD NEVER GET TO THIS LINE!
2011-08-02T09:52:39+10:00 INFO (6): Controller: Myapplication_ErrorController
2011-08-02T09:52:39+10:00 INFO (6): Service: Myapplication_Service_Authentication
哎呀!为什么在重定向下执行行?
还有几点需要注意:
$this->_helper->redirector('index', 'index')
,它在开发和测试环境中都能正常工作; 有什么想法吗?非常感谢!
答案 0 :(得分:2)
重定向器助手有一个布尔成员调用$ _exit,它将告诉它在调用重定向时是否退出。
在您的情况下,此成员被设置为false并且重定向未退出。
您正在使用的Zend_Test_PHPUnit_ControllerTestCase类将重定向器的$ _exit成员设置为false。
这样做是为了在单元测试时重定向不会导致PHPUnit停止执行。如果没有这样做,那么你的测试每次都会中途停止。
这就是您收到不需要的日志消息的原因,因为重定向器没有退出。
请参阅标题部分 “控制器测试和重定向器动作助手”在此link