PHPUnit Zend 框架控制器测试 - 断言上次使用的控制器失败 < "error" > - 显示错误



我们目前正在围绕zend框架控制器进行单元测试。

(我已经稍微抽象了这个代码示例,但想法是一样的......

我们很高兴设法使测试失败,并显示错误消息

Failed asserting last controller used <"error"> ....

通过测试:

$this->dispatch('/controller/action/param');
$this->assertController('controller');
$this->assertAction('action');

因此,在这种情况下,我如何让真正的错误消息冒泡到 PHPUnit,即如果控制器中存在错误,我想知道它而不是调用错误控制器。

如果我在应用程序中设置resources.frontController.params.noErrorHandler = 1.ini,即使出现错误,测试也会通过,因为该控制器和操作仍然发生,但只是不输出任何内容(我知道我可以在输出中查找断言,但这不是重点 - 我想要原始错误)。

我试过开启

convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true" 

在PHPunit中.xml也没有快乐。

任何指示将不胜感激。

我希望所有这些都有意义!?

非常感谢。

不幸的是,Zend_Test_PHPUnit_ControllerTestCase在调度期间显式覆盖某些前端控制器选项。 相关的代码位在这里:

$controller = $this->getFrontController();
$this->frontController
     ->setRequest($request)
     ->setResponse($this->getResponse())
     ->throwExceptions(false)
     ->returnResponse(false);

因为这是在 dispatch() 中完成的,所以你绝对没有机会更改选项。

使用的一个解决方案是创建我自己的基本 ControllerTestCase 来扩展 Zend 并复制整个 Agent() 函数从 Zend 对象,然后更改该行。

它很乱,但它有效。你可以做一个更精细的版本,从配置等中读取一些东西。

这也是我遇到的问题,有时很难追踪错误。我偶然发现了一个解决方案 -- 我修改了错误控制器,以便在生产环境中发生错误时发送电子邮件,但我不小心将其设置为在测试环境中发送 -- 然后,当单元测试中发生这些错误之一时,我收到了一封详细说明该错误的电子邮件。

您不必使用电子邮件通知,但您可能希望在 http://framework.zend.com/manual/en/zend.log.writers.html 查看错误日志记录。您可以将错误写入日志文件,然后检查日志文件。

最新更新