2017-09-21 104 views
1

我在Laravel 5.5中遇到了一个奇怪的问题。我使用PhpStorm,我试图用它来使我的流浪主机上的phpunit调用PHPUnit的是这样的:PhpStorm中的PHPUnit代码覆盖率不引导Laravel

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 Tests\Integration\Authentication\AdminLoginTest /home/vagrant/project/tests/Integration/Authentication/AdminLoginTest.php --teamcity

我定义我的默认配置文件是phpunit.xml文件,通过自带的Laravel默认和正常运行测试没有覆盖工作得很好。这是每当我试图利用代码覆盖它开始与下面的错误而失败的:

Uncaught Error: Class 'Route' not found in /home/vagrant/project/app/routes.php:5

这样做的原因是因为它没有正确加载的外观,可能甚至无法启动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的照顾,如果我没错。

我已经设置了Xdebug的我流浪机器上都FPM和CLI为好,PhpStorm成功地报告它可以通过CLI我流浪盒检测Xdebug 2.5.5,所以我裁定出来的除非我需要为Coverage安装额外的东西。

phpunit.xml还设置了bootstrap/app.php文件在它的引导定义,这是Laravel默认的,所以应该做工精细,它的作品没有覆盖的事实混淆了我。

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

回答

0

大量的试验和错误我想通了之后,那么,问题是,在这种情况下,包括用于代码覆盖功能routes.php和PHPUnit的XDebug的我PHPUnit的代码覆盖率不明白在这个文件门面使用(猜它的太早启动?希望澄清,如果有人知道这是为什么)

请注意,这仅仅是一个问题,因为我有我的App目录内定制 routes.php文件文件的方式,使这个工作是告诉PHPUnit从白名单中排除这个特定的路由文件,即La ravel定义。

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

对于我来说,它看起来像,你排除文件后,代码覆盖率应该正常工作前提是你必须安装了XDebug,其他的外墙被加载就好了,所以我猜那个在routes.php没有按因为那是在Laravel的生命周期中较早加载的。

希望这可以帮助未来的人:)