【问题标题】:PHPUnit code coverage in PhpStorm does not bootstrap LaravelPhpStorm 中的 PHPUnit 代码覆盖率不会引导 Laravel
【发布时间】:2018-03-02 18:29:41
【问题描述】:

我在 Laravel 5.5 上遇到了一个奇怪的问题。我正在使用 PhpStorm 并尝试使用它在我的 Vagrant 主机上对 PHPUnit 进行 phpunit 调用,如下所示:

vagrant:///Users/mymachine/Webdev/project/usr/bin/php -dxdebug.coverage_enable=1 /home/vagrant/project/vendor/phpunit/phpunit/phpunit --coverage-clover /home/vagrant/.phpstorm_helpers/project_AdminLoginTest_coverage --bootstrap /home/vagrant/project/bootstrap/app.php --configuration /home/vagrant/project/phpunit.xml 测试\集成\身份验证\AdminLoginTest /home/vagrant/project/tests/Integration/Authentication/AdminLoginTest.php --团队城市

我已将我的默认配置文件定义为 Laravel 默认附带的 phpunit.xml 文件,并且正常运行测试无覆盖工作正常。每当我尝试利用代码覆盖率时,它就会开始失败并出现以下错误:

未捕获的错误:在 /home/vagrant/project/app/routes.php:5 中找不到类“Route”

这是因为它没有正确加载 Facade,甚至可能无法启动 Laravel。

以前有人做过这个吗?如果有怎么办?

我正在使用setUp() 调用,它是这样定义的

protected function setUp()
{
    parent::setUp(); // Must run first, Laravel is set up using this parent call //
    /** @var AdminModel $user */
    $this->user = $this->createAdmin();
}

我确实首先从父级运行setUp(),因为它应该调用createApplication(),如果我没记错的话,应该负责启动 Laravel。

我也在我的 Vagrant 机器上的 FPM 和 CLI 上设置了 Xdebug,PhpStorm 成功报告它可以通过 CLI 在我的 Vagrant 机器上检测到 Xdebug 2.5.5 em>,所以我排除了这种可能性,除非我需要为 Coverage 安装额外的东西。

我的phpunit.xml 还在它的引导程序定义中设置了bootstrap/app.php 文件,这是 Laravel 的默认设置,所以它应该可以正常工作,而且它没有覆盖的事实让我感到困惑。

我在这里遗漏了什么吗?谢谢您的帮助。如果我遗漏了您需要的一些细节,请告诉我。

【问题讨论】:

    标签: php laravel phpunit phpstorm


    【解决方案1】:

    经过多次试验和错误,我想通了,所以,问题是我的 PHPUnit 代码覆盖率在这种情况下包括 routes.php 并且用于代码覆盖率功能的 PHPUnit 的 XDebug 无法理解此文件中的 Facade 用法(猜它启动得太早了?如果有人知道这是为什么,将不胜感激)

    请注意,这只是一个问题,因为我的 App 目录中有一个 custom routes.php 文件,完成这项工作的方法是告诉 PHPUnit 排除这个特定的路由文件来自 Laravel 定义的白名单

    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app/API</directory>
            <exclude>
                <file>./app/API/routes.php</file>
            </exclude>
        </whitelist>
    </filter>
    

    对我来说看起来是这样,在排除该文件后,只要您安装了 XDebug,代码覆盖率应该可以正常工作,其他外观也可以正常加载,所以我猜 routes.php 中的那个没有因为这是在 Laravel 生命周期的早期加载的。

    希望这对将来的人有所帮助:)

    【讨论】:

      猜你喜欢
      • 2015-06-27
      • 2012-05-04
      • 2012-08-04
      • 2018-05-29
      • 2012-01-18
      • 2019-09-12
      • 2012-01-14
      • 2011-05-27
      • 1970-01-01
      相关资源
      最近更新 更多