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

我在Laravel 5.5上遇到了一个奇怪的问题。 我正在使用PhpStorm,并试图使用它来将我的Vagrant主机上的phpunit调用改为PHPUnit,如下所示:

流浪汉:///用户/ mymachine上/ Webdev的/项目的/ usr / bin中/ PHP -dxdebug.coverage_enable = 1 /家庭/流浪者/项目/供应商/ PHPUnit的/ PHPUnit的/ PHPUnit的--coverage三叶草/home/vagrant/.phpstorm_helpers / project_AdminLoginTest_coverage --bootstrap /home/vagrant/project/bootstrap/app.php --configuration /home/vagrant/project/phpunit.xml测试集成认证 AdminLoginTest /家庭/流浪者/项目/测试/集成/认证/ 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 ,所以我认为这是可能的,除非我需要为Coverage安装额外的东西。

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

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


经过大量的试验和错误,我发现了这个问题,所以问题是我的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>

对我来说,看起来像这样,在排除该文件后,Code Coverage应该可以正常工作,前提是你已经安装了XDebug,其他Facades已经加载好了,所以我猜想routes.php中的那个不会因为加载早些时候在Laravel的生命周期中。

希望这有助于未来的人:)

链接地址: http://www.djcxy.com/p/83201.html

上一篇: PHPUnit code coverage in PhpStorm does not bootstrap Laravel

下一篇: Adding subdirectory to tests in Laravel; connection can't be resolved