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 вместе с покрытием кода? Как я должен его настроить и использовать?
Большое спасибо за вашу помощь.
4 answers
Похоже, вам не хватает расширения Xdebug. Если вы используете homebrew, вы можете установить его следующим образом:
brew install php70-xdebug
После этого не забудьте отредактировать свой файл php.ini, чтобы включить расширение.
php -i | grep xdebug
После проверки того, что xdebug включен, вы сможете выполнить покрытие кода
Обновление для PHP 7.1
Xdebug необходим для поиска кода и покрытия, поэтому xdebug необходимо установить или включить в тестовой среде. xdebug в производственной среде не внушаем, это повлияет на производительность, если вы включили
brew install php71-xdebug
Обновление для всех, кто застрял;
pecl install xdebug
Как ответили другие разработчики, вам необходимо установить php xdebug
но я хочу добавить новые рекомендации для разработчиков, которые используют homestead
в усадьбе по умолчанию есть xdebog (но он выключен), и вы можете включить или выключить его
если вы хотите сделать это с помощью приведенной ниже команды в усадьбе
for on :
xon
for off:
xoff
Затем проверьте php-v, и вы увидите xdebug в поле сведений