2017-04-17 29 views
1

我有一个新的Laravel Boilerplate运行在Laravel Homestead环境中运行完美。 的php -v命令返回我这个信息如何设置Laravel Boilerplate phpunit在Homestead环境中提供代码覆盖范围

PHP 7.1.2-3+deb.sury.org~xenial+1 (cli) (built: Feb 22 2017 10:08:33) (NTS) 
Copyright (c) 1997-2017 The PHP Group 
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 
    with Zend OPcache v7.1.2-3+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies 
    with blackfire v1.14.3~linux-x64-non_zts71, https://blackfire.io, by Blackfireio Inc. 

我正在寻找如何设置PHPUnit的代码覆盖率的工作,发现我需要的XDebug,使其工作。 Google搜索了一下,发现了xon homestead命令,它启用了xDebug扩展。所以我跑了,并找到了Xdebug扩展已启用,作为一个新的php -v显示:

PHP 7.1.2-3+deb.sury.org~xenial+1 (cli) (built: Feb 22 2017 10:08:33) (NTS) 
Copyright (c) 1997-2017 The PHP Group 
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 
    with Zend OPcache v7.1.2-3+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies 
    with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans 
    with blackfire v1.14.3~linux-x64-non_zts71, https://blackfire.io, by Blackfireio Inc. 

而且我需要添加与composer require --dev phpunit/php-code-coverage:4.0.8(具体版本的PHP代码覆盖率依赖,因为我得到了一些需求错误同时试图安装最新的)。

然后我跑phpunit --coverage-clover=coverage.xml,并得到了这个致命的错误:

PHPUnit 5.7.19 by Sebastian Bergmann and contributors. 

PHP Fatal error: Uncaught Error: Class 'Breadcrumbs' not found in /home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access/User.php:3 
Stack trace: 
#0 /home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access.php(3): require() 
#1 /home/vagrant/servirme/vendor/phpunit/php-code-coverage/src/CodeCoverage.php(1083): include_once('/home/vagrant/s...') 
#2 /home/vagrant/servirme/vendor/phpunit/php-code-coverage/src/CodeCoverage.php(256): SebastianBergmann\CodeCoverage\CodeCoverage->initializeData() 
#3 /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestResult.php(650): SebastianBergmann\CodeCoverage\CodeCoverage->start(Object(AccessHelperTest)) 
#4 /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestCase.php(860): PHPUnit_Framework_TestResult->run(Object(AccessHelperTest)) 
#5 /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestSuite.php(722): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult)) 
#6 /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestSuite.php(722): PHP in /home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access/User.php on line 3 

Fatal error: Uncaught Error: Class 'Breadcrumbs' not found in /home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access/User.php on line 3 

Error: Class 'Breadcrumbs' not found in /home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access/User.php on line 3 

Call Stack: 
    0.0005  350872 1. {main}() /home/vagrant/servirme/vendor/phpunit/phpunit/phpunit:0 
    0.0736  562656 2. PHPUnit_TextUI_Command::main() /home/vagrant/servirme/vendor/phpunit/phpunit/phpunit:52 
    0.0736  562768 3. PHPUnit_TextUI_Command->run() /home/vagrant/servirme/vendor/phpunit/phpunit/src/TextUI/Command.php:116 
    0.3058 1886960 4. PHPUnit_TextUI_TestRunner->doRun() /home/vagrant/servirme/vendor/phpunit/phpunit/src/TextUI/Command.php:186 
    0.5521 1993968 5. PHPUnit_Framework_TestSuite->run() /home/vagrant/servirme/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:517 
    0.5558 1994968 6. PHPUnit_Framework_TestSuite->run() /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestSuite.php:722 
    0.5598 1995536 7. PHPUnit_Framework_TestCase->run() /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestSuite.php:722 
    0.5599 1995536 8. PHPUnit_Framework_TestResult->run() /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestCase.php:860 
    0.5704 2003832 9. SebastianBergmann\CodeCoverage\CodeCoverage->start() /home/vagrant/servirme/vendor/phpunit/phpunit/src/Framework/TestResult.php:650 
    0.5704 2003832 10. SebastianBergmann\CodeCoverage\CodeCoverage->initializeData() /home/vagrant/servirme/vendor/phpunit/php-code-coverage/src/CodeCoverage.php:256 
    0.6267 2193768 11. include_once('/home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access.php') /home/vagrant/servirme/vendor/phpunit/php-code-coverage/src/CodeCoverage.php:1083 
    0.6278 2194104 12. require('/home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access/User.php') /home/vagrant/servirme/app/Http/Breadcrumbs/Backend/Access.php:3 

我这是关系到Laravel外立面的感觉,这使我想到的PHPUnit没有运行我的自动加载的文件,但属性bootstrap="bootstrap/autoload.php"默认存在于phpunit.xml文件中。

不知道从哪里出去,出了什么错误的想法。

编辑: 我的家园的版本是5.1.0

+0

没有覆盖的phpunit工作吗?你有没有尝试在你的引导文件中添加'echo“Test \ n \ n”;'并在输出中查找它? – dbrumann

+0

是的,没有代码覆盖它按预期工作。还没有尝试过,因为'phpunit'命令正常工作 –

回答

0

新鲜的样板安装带有一个phpunit.xml文件。它里面有一个过滤器标签与此数据

<filter> 
    <whitelist processUncoveredFilesFromWhitelist="true"> 
     <directory suffix=".php"> 
      ./app 
     </directory> 
    </whitelist> 
</filter> 

我不是PHPUnit的专家,所以我打了一个小的XML,并发现whitelist标签是导致其破裂。我玩了一些它,发现如果我删除processUncoveredFilesFromWhitelist="true"属性,phpunit命令能够运行并生成我需要的代码覆盖率。


只是一个说明。

不幸的是,如果没有代码覆盖测试,运行需要大约1.5分钟的时间,并且使用这个技巧开启代码覆盖,测试需要大约11分钟。

由于该问题与生成代码覆盖率报告有关,因此我会将其标记为已接受,并且如果我发现任何可能帮助与我具有相同问题的人都会更新此问题。