我在使用phpunit和Laravel 4框架。为什么在测试过程中出现PHP错误时, 不显示任何错误信息 (例如: 缺少方法)?
我们怎样才能让phpunit显示所有的错误?
我想问题可能出在PHP本身, 而不是PHPUnit. 请按照以下步骤进行。
1. 检查正确的 php.ini
. 请注意,有些系统可以使用不同的 php.ini
针对不同的PHP SAPI。
php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
2. 编辑错误输出设置. 设置适当的设置 错误报告, display_errors, display_startup_errors 在相应 php.ini
:
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
如果你不想在全局范围内改变CLI错误报告行为,你可以使用PHPUnit bootstrap文件来定义这些设置。
1. 为PHPUnit设置引导文件. 打开 /Applications/MAMP/htdocs/testtingDecoded/phpunit.xml
文件,并在phpunit标签中添加bootstrap属性。
<phpunit bootstrap="bootstrap.php">
2. 创建bootstrap.php 在文件夹里有 phpunit.xml
:
<?php
ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
这是一个很常见的问题,特别是当你在生产服务器上运行测试时,或者当测试人员不是很了解PHP配置时。
这个问题与以下几点有关 php.ini
的设置,正如 Alexander Yancharuk 在他的回答中,他建议的所有解决方案都能正常工作。
但是还有一种解决方案可能会有用,就像对我一样,那就是在 PHPUnit 配置文件(XML)中设置适当的 PHP 设置,如下所示。
<phpunit>
<suites>
...
</suites>
<php>
<ini name="display_errors" value="On" />
<ini name="display_startup_errors" value="On" />
</php>
</phpunit>
使用这个方法,你不仅可以个性化错误显示,还可以个性化很多PHP配置,特别是针对你的测试套件,而不影响你的生产配置,也不用专门为此写一个引导文件。
你可以使用类似下面的东西来专门打印错误到控制台。
$response = $this->get('https://stackoverflow.com/questions/18047844-NotFound/');
$response->dumpSession($keys = ['error']);