【问题标题】:Why does phpunit not show any errors in the console为什么phpunit在控制台中不显示任何错误
【发布时间】:2013-08-05 13:13:32
【问题描述】:

我正在使用带有 Laravel 4 框架的 phpunit。为什么在测试期间出现 PHP 错误时,没有显示错误消息(例如:缺少方法)?

我们如何让 phpunit 显示所有错误?

【问题讨论】:

标签: php tdd phpunit laravel laravel-4


【解决方案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 配置,特别是针对您的测试套件,使您的生产配置保持不变,而无需为此编写引导文件。

【讨论】:

  • 我试过这个,但它不适合我。只是想知道我是否遗漏了什么。我在运行 High Sierra 的 Mac 上使用 Laravel 5.6。 PHP 版本 PHP 7.1.7 和 phpunit 7.0.0。我将您在 &lt;php&gt;&lt;/php&gt; 元素中显示的两行添加到 Laravel 附带的 phpunit.xml 文件中,但没有运气。仍然没有显示错误。知道为什么不?
  • @flyingL123 你有机会用 Dusk 测试来测试它吗?如果是这样,请将其添加到 phpunit.dusk.xml,而不是 phpunit.xml
  • 不使用 Dusk
  • 我还记得遇到同样的问题 b4 却没有找到解决方案浪费我的时间。我无法理解为什么 PHP 单元默认不显示正常错误并覆盖设置为显示错误的任何内容。 PHP 的 de facto 标准测试库这一事实并没有改变任何事情。在专门用于调试的库中积极隐藏错误是没有意义的。更糟糕的是,这个答案不起作用。
  • PHPUnit NOT 用于调试。调试器,例如 Xdebug,是。隐藏日志消息对于获得良好的测试结果报告是非常必要的。此外,它们是(应该)在生产环境中使用的配置值。在测试时显示日志是一种异常情况,但如果需要,您始终可以临时打开它们。 “这些答案不起作用” 是错误的陈述。他们确实工作。请仔细检查在做什么。
【解决方案2】:

我认为问题可能是指 PHP 本身,而不是 PHPUnit。请按照以下步骤操作:

1.检查正确的php.ini。请注意,某些系统可以为不同的 PHP SAPI 使用不同的php.ini

php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini

2。编辑错误输出设置。在对应的php.ini 中为error_reportingdisplay_errorsdisplay_startup_errors 设置适当的设置:

error_reporting = E_ALL
display_errors = On
display_startup_errors = On

如果您不想在全局范围内更改 CLI 错误报告行为,您可以使用 PHPUnit 引导文件来定义这些设置。

1.为 PHPUnit 设置引导程序。打开/Applications/MAMP/htdocs/testtingDecoded/phpunit.xml文件,在phpunit标签中添加bootstrap属性:

<phpunit bootstrap="bootstrap.php">

2。在phpunit.xml文件夹中创建bootstrap.php:

<?php
ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');

【讨论】:

    【解决方案3】:

    您可以使用类似下面的方式将错误专门打印到控制台。

    $response = $this->get('https://stackoverflow.com/questions/18047844-NotFound/');
    $response->dumpSession($keys = ['error']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-26
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多