web-dev-qa-db-fra.com

Laravel 5: PHPUnit et aucun pilote de couverture de code disponible

J'aimerais utiliser PHPUnit pour créer des rapports de couverture de code. J'ai essayé beaucoup de configurations d'installation trouvées sur le Web. Mais rien ne semble fonctionner.

J'utilise la dernière version de Laravel 5 (> 5.2) et PHPUnit v. 5.0.10. De plus, j'utilise MAMP sur Mac OS X 10.9.5 avec PHP 7.

Lorsque j'exécute PHPUnit intégré à ma distribution Laravel, le message d'erreur suivant s'affiche.

$ 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`

Mon fichier composer ressemble à ceci:

"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.*"
},

J'ai aussi essayé la commande suivante:

/Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v

Cela semble bien configurer le pilote de couverture de code, mais cela aboutit à une exception:

$ /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:
...

Le phpunit.xml ressemble à ceci:

<?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>

Est-il possible d'utiliser PHPUnit fourni avec le framework Laravel avec la couverture de code? Comment dois-je le configurer et l'utiliser?

Merci beaucoup pour votre aide.

54
LaDude

Il semble que vous manquiez l'extension Xdebug. Si vous utilisez homebrew, vous pouvez l'installer comme suit:

brew install php70-xdebug

Après cela, n'oubliez pas de modifier votre fichier php.ini pour activer l'extension.

php -i | grep xdebug

Après avoir vérifié que xdebug est activé, vous devriez pouvoir couvrir le code

72
Nenad

Mise à jour pour toute autre personne coincée;

pecl install xdebug

11
Robert Pounder

Mise à jour pour PHP 7.1

xdebug est essentiel pour la recherche de code et la couverture, de sorte que xdebug doit être installé ou activé dans un environnement de test. xdebug dans l'environnement de production n'est pas suggestible, cela affectera les performances si vous avez activé

brew install php71-xdebug

5
Suresh Velusamy

Si vous exécutez phpunit dans une boîte vagrant, vous n'avez pas besoin d'installer xdebug en local et Homestead est livré avec l'installation de xdebug automatiquement. il suffit de lier le fichier Homestead xdebug.ini

Voici l'étape qui a fonctionné pour moi:

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/

Dans la commande ci-dessus, si vous exécutez 7.3 Ou 7.1, Remplacez-le en fonction de votre version php

3
Purvesh

Pour les utilisateurs de Windows:

1) Télécharger xdebug

2) Renommez le fichier en _php_xdebug.dll_ et copiez-le dans le dossier ext de votre installation php, par exemple C :\Program Files (x86)\php\ext

3) Ouvrez votre fichier php.ini . Pour moi, il est disponible sur C:\Program Files (x86)\php\php.ini .

4) Collez le code ci-dessous au bas du fichier.

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
3
Mazino S Ukah

Comme d'autres développeurs ont répondu, vous devez installer PHP Xdebug mais je veux ajouter une nouvelle recommandation pour les développeurs qui utilisent Homestead par défaut ont Xdebug (mais il est désactivé) et vous pouvez l'activer. ou OFF

Si vous voulez utiliser la commande ci-dessous dans Homestead

#for on :
xon

#for off:
xoff

Puis vérifier php -v et vous verrez Xdebug dans la boîte de détails

2
Mhmd