Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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