tests - Laravel 5: PHPUnit y controlador de cobertura de código no disponible
run test laravel (6)
Me gustaría usar PHPUnit para crear informes de cobertura de código. He intentado muchas configuraciones de instalación que se encuentran en la web. Pero nada parece funcionar.
Utilizo la última versión de Laravel 5 (> 5.2) y PHPUnit v. 5.0.10. Además, uso MAMP en Mac OS X 10.9.5 con PHP 7.
Cuando ejecuto PHPUnit que está integrado en mi distribución de Laravel, recibo el siguiente error.
$ 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`
Mi archivo de compositor se ve así:
"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.*"
},
También probé el siguiente comando:
/Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v
Esto parece configurar bien el controlador de cobertura de código, pero termina en una excepción:
$ /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:
...
El phpunit.xml tiene el siguiente aspecto:
<?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>
¿Es posible usar PHPUnit que viene con el marco Laravel junto con la cobertura de código? ¿Cómo debo configurarlo y usarlo?
Muchas gracias por tu ayuda.
Actualización para cualquier otra persona atascada;
pecl install xdebug
Como respondieron otros desarrolladores, debe instalar PHP Xdebug, pero quiero agregar una nueva recomendación para los desarrolladores que usan Homestead de manera predeterminada que tienen Xdebug (pero está desactivado) y puede activarlo o desactivarlo
Si desea hacerlo en uso debajo del comando en la granja
#for on :
xon
#for off:
xoff
Luego verifique
php -v
y verá Xdebug en el cuadro de detalles
Para usuarios de Windows:
1) Descargar xdebug
2) Cambie el nombre del archivo a _php_xdebug.dll_ y copie el archivo a la carpeta ext en su instalación de php, por ejemplo, C: / Archivos de programa (x86) / php / ext
3) Abra su archivo php.ini . Para mí está disponible en C: / Archivos de programa (x86) / php / php.ini .
4) Pegue el siguiente código en la parte inferior del archivo.
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
Parece que te falta la extensión Xdebug. Si está utilizando homebrew, puede instalarlo como:
brew install php70-xdebug
Después de eso, no olvides editar tu archivo php.ini para habilitar la extensión.
php -i | grep xdebug
Después de comprobar que xdebug está habilitado, debería poder hacer la cobertura del código
Si ejecuta phpunit dentro de un cuadro vagabundo, entonces no necesita instalar xdebug en local y homestead viene con la instalación de xdebug automáticamente. solo necesita vincular el archivo xdebug.ini de homestead
Aquí está el paso que funcionó para mí:
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/
En el comando anterior si está ejecutando
7.3
o
7.1
, reemplácelo según su versión de php
Actualización para PHP 7.1
xdebug es esencial para la búsqueda y la cobertura del código, por lo que debe instalarse o habilitarse en el entorno de prueba. xdebug en el entorno de producción no es recomendable, afectará el rendimiento si lo enciende
brew install php71-xdebug