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