我在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的默认设置,因此应该可以正常工作,并且它可以正常运行报道让我困惑。
我在这里遗漏了什么吗?谢谢您的帮助。如果我错过了您需要的一些细节,请告诉我。
答案 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生命周期的早期加载了。
希望这可以帮助将来的某个人:)