Как настроить phpunit Laravel Boilerplate для обеспечения покрытия кода в среде Homestead

У меня есть новая http://laravel-boilerplate.com/, работающая в среде Laravel Homestead, которая работает отлично. 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 blackfire v1.14.3~linux-x64-non_zts71, https://blackfire.io, by Blackfireio Inc.

Я искал, как настроить покрытие кода phpunit для работы, и обнаружил, что мне нужен xDebug, чтобы он работал. Погуглил еще немного и нашел xon команда усадьбы, которая включает расширение 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.

Также мне нужно было добавить зависимость покрытия php-кода с помощью composer require --dev phpunit/php-code-coverage:4.0.8 (конкретная версия, потому что я получал некоторые ошибки требований при попытке установить новейшую).

Потом я побежал 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 файл по умолчанию.

Не знаю, куда идти отсюда, из идей, что не так.

РЕДАКТИРОВАТЬ: My Homestead версия 5.1.0

1 ответ

Решение

Новая установка Boilerplate поставляется с phpunit.xml файл. Внутри него есть тег фильтра с этими данными.

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

Я не эксперт по PHPUnit, поэтому я немного поиграл с XML и обнаружил, что whitelist тег был причиной его поломки. Я играл немного больше с этим, и обнаружил, что если я удаляю processUncoveredFilesFromWhitelist="true" атрибутов, phpunit Команда умеет запускать и генерировать покрытие кода, которое мне нужно.


Просто записка.

К сожалению, без тестов покрытия кода, которые раньше выполнялись ~1,5 минуты, а при включенном покрытии кода с помощью этого трюка, тесты занимают ~11 минут.

Поскольку вопрос связан с генерацией отчета о покрытии кода, я отмечу его как принятый и буду обновлять этот вопрос, если найду что-нибудь, что может помочь кому-то с такой же проблемой, как и я.

Другие вопросы по тегам