Zend Framework:重定向器在开发和测试环境之间表现不同

时间:2011-08-02 00:12:34

标签: php zend-framework

我正在编写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'),它在开发和测试环境中都能正常工作;
  • 我检查了htaccess,index.php,application.ini和bootstrap.php,并且发现两种环境之间的错误报告没有差异
  • 我的测试类扩展了Zend_Test_PHPUnit_ControllerTestCase

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

重定向器助手有一个布尔成员调用$ _exit,它将告诉它在调用重定向时是否退出。

在您的情况下,此成员被设置为false并且重定向未退出。

您正在使用的Zend_Test_PHPUnit_ControllerTestCase类将重定向器的$ _exit成员设置为false。

这样做是为了在单元测试时重定向不会导致PHPUnit停止执行。如果没有这样做,那么你的测试每次都会中途停止。

这就是您收到不需要的日志消息的原因,因为重定向器没有退出。

请参阅标题部分 “控制器测试和重定向器动作助手”在此link