Laravel 5: PHPUnit и драйвер для покрытия кода отсутствует
Я хотел бы использовать PHPUnit для создания отчетов о покрытии кода. Я пробовал множество установочных установок, найденных в Интернете. Но ничего не получается.
Я использую последнюю версию Laravel 5 ( > 5.2) и PHPUnit v. 5.0.10. Кроме того, я использую MAMP для Mac OS X 10.9.5 с PHP 7.
Когда я запускаю PHPUnit, интегрированный в мой дистрибутив Laravel, я получаю следующую ошибку.
$ vendor/bin/phpunit -v
PHPUnit 5.0.10 by Sebastian Bergmann and contributors.
Runtime: PHP 7.0.0
Configuration: /Applications/MAMP/htdocs/myProject/phpunit.xml
Error: No code coverage driver is available`
Мой файл-композитор выглядит так:
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "5.0.*",
"phpunit/php-code-coverage": "^3",
"symfony/css-selector": "2.8.*|3.0.*",
"symfony/dom-crawler": "2.8.*|3.0.*"
},
Я также пробовал следующую команду:
/Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v
Похоже, что правильно настроил драйвер покрытия кода, но он попадает в исключение:
$ /Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v
PHPUnit 5.0.10 by Sebastian Bergmann and contributors.
Runtime: PHPDBG 7.0.0
Configuration: /Applications/MAMP/htdocs/myProject/phpunit.xml
[PHP Fatal error: Uncaught ErrorException: include(/Applications/MAMP/htdocs/myProject/app/Exceptions/Handler.php): failed to open stream: Too many open files in /Applications/MAMP/htdocs/myProject/vendor/composer/ClassLoader.php:412
Stack trace:
...
phpunit.xml выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="bootstrap/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html" target="./tests/codeCoverage" charset="UTF-8"/>
</logging>
<filter>
<whitelist>
<directory suffix=".php">app/</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>
</phpunit>
Можно ли использовать PHPUnit, который поставляется вместе с базой Laravel вместе с охватом кода? Как его настроить и использовать?
Большое спасибо за вашу помощь.
Ответы
Ответ 1
Кажется, что вам не хватает расширения Xdebug. Если вы используете доморощенный, вы можете установить его так:
brew install php70-xdebug
После этого не забудьте отредактировать файл php.ini, чтобы включить расширение.
php -i | grep xdebug
После проверки того, что xdebug включен, вы сможете выполнять покрытие кода
Ответ 2
Обновление для всех, кто застрял;
pecl install xdebug
Ответ 3
Обновление для PHP 7.1
xdebug необходим для поиска и покрытия кода, поэтому xdebug необходимо установить или включить в тестовой среде. xdebug в рабочей среде не внушает доверия, это повлияет на производительность, если вы включили
brew install php71-xdebug
Ответ 4
Как ответили другие разработчики, вам нужно установить PHP Xdebug, но я хочу добавить новую рекомендацию для разработчиков, которые используют homestead по умолчанию, имеют Xdebug (но он выключен), и вы можете включить или выключить его
Если вы хотите сделать это при использовании ниже команды в усадьбе
#for on :
xon
#for off:
xoff
Затем проверьте php -v
и вы увидите Xdebug в подробном окне
Ответ 5
Для пользователей Windows:
1) скачать xdebug
2) переименуйте файл в файл debug.dll и скопируйте файл в папку ext в вашей php-установке, например C:\Program Files (x86)\php\ext
3) Откройте файл php.ini. Для меня это доступно в C:\Program Files (x86)\php\php.ini.
4) Вставьте приведенный ниже код внизу файла.
zend_extension = php_xdebug.dll
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost
xdebug.remote_autostart = 1
xdebug.remote_port = 9000
xdebug.show_local_vars = 1
Ответ 6
Если вы запустите phpunit внутри бродячего бокса, вам не нужно устанавливать xdebug в локальном, а homestead - с установкой xdebug автоматически. нужно только связать файл homestead xdebug.ini
Вот шаг, который сработал для меня:
cd ~/homestead/REPLACE THIS WITH YOUR HOMESTEAD FOLDER IN LOCAL //
vagrant ssh
sudo ln -s /etc/php/7.2/fpm/conf.d/20-xdebug.ini /etc/php/7.2/cli/conf.d/
В приведенной выше команде, если ваш запуск 7.3
или 7.1
затем заменит его на основе вашей версии php