PhpStorm中的PHPUnit代码覆盖率不会引导Laravel

时间:2017-09-21 11:56:48

标签: php laravel phpunit phpstorm

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

  

流浪:///用户/ mymachine上/ Webdev的/项目的/ usr /斌/ 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   --teamcity

我已将默认配置文件定义为默认情况下Laravel附带的phpunit.xml文件,并且正常运行测试无覆盖工作正常。每当我尝试使用代码覆盖时,它都会因以下错误而失败:

  

未捕捉错误:班级'路线'在/home/vagrant/project/app/routes.php:5

中找不到

原因是因为它没有正确加载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,如果我没有弄错的话。< / p>

我已经在FPM和CLI上的Vagrant机器上设置了 Xdebug ,并且PhpStorm成功报告它可以通过Xdebug 2.5.5 > CLI ,所以除非我需要为Coverage安装额外的东西,否则我可能会将其作为可能性。

我的phpunit.xml还在其自举定义中设置了bootstrap/app.php文件,这是Laravel的默认设置,因此应该可以正常工作,并且它可以正常运行报道让我困惑。

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

1 个答案:

答案 0 :(得分:0)

经过多次试验和错误后我发现了,所以,问题是我的PHPUnit代码覆盖范围包括routes.php和PHPUnit的XDebug用于代码覆盖功能无法理解这个文件中的Facade用法(猜测它太早启动了?如果有人知道为什么会这样做,我会很感激澄清)

请注意,这只是一个问题,因为我在App目录中有一个自定义 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,则代码覆盖率应该可以正常工作,其他Facades加载得很好,所以我猜测{{1}中的那个因为那些在Laravel生命周期的早期加载了。

希望这可以帮助将来的某个人:)