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 вместе с покрытием кода? Как я должен его настроить и использовать?

Большое спасибо за вашу помощь.

Author: LaDude, 2016-03-05

4 answers

Похоже, вам не хватает расширения Xdebug. Если вы используете homebrew, вы можете установить его следующим образом:

brew install php70-xdebug

После этого не забудьте отредактировать свой файл php.ini, чтобы включить расширение.

php -i | grep xdebug

После проверки того, что xdebug включен, вы сможете выполнить покрытие кода

 62
Author: Nenad, 2016-03-15 12:55:38

Обновление для PHP 7.1

Xdebug необходим для поиска кода и покрытия, поэтому xdebug необходимо установить или включить в тестовой среде. xdebug в производственной среде не внушаем, это повлияет на производительность, если вы включили

brew install php71-xdebug

 5
Author: Suresh Velusamy, 2017-07-26 10:37:42

Обновление для всех, кто застрял;

pecl install xdebug

 4
Author: Robert Pounder, 2018-05-30 14:38:31

Как ответили другие разработчики, вам необходимо установить php xdebug
но я хочу добавить новые рекомендации для разработчиков, которые используют homestead
в усадьбе по умолчанию есть xdebog (но он выключен), и вы можете включить или выключить его
если вы хотите сделать это с помощью приведенной ниже команды в усадьбе

for on :
xon

for off:
xoff

Затем проверьте php-v, и вы увидите xdebug в поле сведений

 1
Author: Mhmd, 2018-07-24 11:31:35