2016-03-05 9 views
34

Ich möchte mit PHPUnit Code Coverage-Berichte erstellen. Ich habe viele Installations-Setups im Internet ausprobiert. Aber nichts scheint zu funktionieren.Laravel 5: PHPUnit und kein Coverage-Treiber verfügbar

Ich benutze die neueste Version von Laravel 5 (> 5.2) und PHPUnit v. 5.0.10. Außerdem verwende ich MAMP unter Mac OS X 10.9.5 mit PHP 7.

Wenn ich PHPUnit, die in meine Laravel-Distribution integriert ist, ausführen, erhalte ich den folgenden Fehler.

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

Mein Komponist Datei wie folgt aussieht:

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

Ich habe auch den folgenden Befehl versucht:

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

Dadurch wird die Code-Coverage-Treiber gut einzurichten scheint, aber es endet in einer Ausnahme:

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

Die phpunit.xml sieht wie folgt aus:

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

Ist es möglich, PHPUnit zu verwenden, die mit dem Laravel Rahmen kommt zusammen mit Codeabdeckung? Wie sollte ich es einrichten und verwenden?

Vielen Dank für Ihre Hilfe.

Antwort

50

Es scheint, als ob Sie die Xdebug-Erweiterung fehlen. Wenn Sie Homebrew verwenden können Sie installieren möchten:

brew install php70-xdebug 

Danach, vergessen Sie nicht, Ihre php.ini-Datei zu bearbeiten, um die Erweiterung zu ermöglichen.

php -i | grep xdebug 

Nach dieser xdebug Überprüfung aktiviert Sie sollten in der Lage sein, Code-Coverage zu tun

+2

habe ich Homebrew xdebug zu installieren. Wie aktiviere ich die Erweiterung in php.ini? Ich habe die folgende Zeile aktiviert: zend_extension = "/ Anwendungen/MAMP/bin/php/php7.0.0/lib/php/Erweiterungen/no-debug-non-zts-20151012/xdebug.so" '. Der Pfad ist gültig. Ich weiß, dass es nicht der Pfad zu xdebug ist, der von Homebrew installiert wurde. Aber wo hat Homebrew xdebug installiert? Ich kann es nicht auf meinem System finden. – LaDude

+1

Verwenden Sie php -i | grep php.ini, um zu sehen, wo sich die geladene php.ini-Konfigurationsdatei befindet. Nachdem Sie es gefunden haben, fügen Sie einfach am Ende der Datei die oben angegebene Zeile hinzu. In meinem Fall installierte Homebrew die Erweiterung in zend_extension = "/ usr/local/opt/php70-xdebug/xdebug.so" – Nenad

+2

Es funktioniert jetzt. Ich habe die xdebug App verwendet, die von Homebrew installiert wurde. Ich habe tatsächlich die falsche php.ini-Datei bearbeitet, die sich in '/ Applications/MAMP/conf/php7.0.0 'befindet. Nach dem Bearbeiten der korrekten php.ini-Datei unter '/ Applications/MAMP/bin/php/php7.0.0/conf' und dem Neustart des MAMP-Web-Servers, führt phpunit nun die Code-Abdeckung aus. Danke für Ihre Hilfe. – LaDude

2

Update für PHP 7.1

xdebug für Code-Nachschlag und Berichterstattung unerlässlich ist, so ist xdebug muss sein installiert oder in der Testumgebung aktiviert. xdebug in der Produktionsumgebung ist nicht beeinflussbar, wird es die Leistung auswirken, wenn Sie auf

brew install php71-xdebug

gedreht