2017-09-21 2 views
1

Ich habe ein seltsames Problem auf Laravel 5.5. Ich verwende PhpStorm und ich versuche, es zu verwenden, um einen phpunit Anruf auf meinem Vagrant Host zu machen, so PHPUnit:PHPUnit Codeabdeckung in PHPStorm bootet Laravel nicht

vagrant:///Users/mymachine/Webdev/project/usr/bin/php -dxdebug.coverage_enable=1 /home/vagrant/project/vendor/phpunit/phpunit/phpunit --coverage-clover /home/vagrant/.phpstorm_helpers/project_AdminLoginTest_coverage --bootstrap /home/vagrant/project/bootstrap/app.php --configuration /home/vagrant/project/phpunit.xml Tests\Integration\Authentication\AdminLoginTest /home/vagrant/project/tests/Integration/Authentication/AdminLoginTest.php --teamcity

Ich habe meine Standard-Konfigurationsdatei definiert die phpunit.xml Datei zu sein, die mit Laravel kommt durch Standard und Tests normal laufen ohne Abdeckung funktioniert gut. Es ist, wenn ich versuche Verwendung von Code-Coverage zu machen, die es mit dem folgenden Fehler beginnt versagt:

Uncaught Error: Class 'Route' not found in /home/vagrant/project/app/routes.php:5

Der Grund dafür ist, weil es nicht die Fassade richtig geladen und wird wahrscheinlich nicht einmal booten Laravel.

Hat jemand das schon mal zur Arbeit gebracht? Wenn das so ist, wie?

ich einen setUp() Anruf verwende, ist es definiert als solche

protected function setUp() 
{ 
    parent::setUp(); // Must run first, Laravel is set up using this parent call // 
    /** @var AdminModel $user */ 
    $this->user = $this->createAdmin(); 
} 

ich setUp() von der Mutter laufen zunächst als das soll createApplication() nennen, welche sollte kümmern Laravel booten, wenn ich nicht falsch.

Ich habe einrichten Xdebug auf meiner Vagrant Maschine sowohl auf FPM und CLI als auch, und PhpStorm berichtet erfolgreich, dass es Xdebug 2.5.5 auf meiner Vagrant Box über CLI erkennen kann, so dass ich entscheiden, dass, wie eine Möglichkeit, es sei denn, ich muss etwas extra für die Coverage installieren.

Mein phpunit.xml setzt auch die bootstrap/app.php Datei oben in sie Bootstrap-Definition ist, die die Laravel Verzug, so dass sollte gut funktionieren und die Tatsache, dass es ohne die Abdeckung verwirrt mich funktioniert.

Fehle ich hier etwas? Danke für Ihre Hilfe. Lassen Sie mich wissen, wenn ich einige Details vermisse, die Sie brauchen.

Antwort

0

Nach viel Versuch und Irrtum ich es herausgefunden, so, das Problem ist, dass meine PHPUnit Codeabdeckung ist in diesem Fall einschließlich der routes.php und PHPUnit XDebug für die Code-Coverage-Feature verwendet, nicht die Fassade Verwendung in dieser Datei zu verstehen, (denke, es ist zu früh gestartet wird? Wegbeschreibungen schätzen, wenn jemand weiß, warum das so ist)

Beachten sie, dass dies nur ein Problem, weil ich habe eine benutzerdefinierte routes.php Datei in meinem App Verzeichnis, auf die Art und Weise dies zu machen Arbeit ist nur PHPUnit zu sagen, diese spezifische Routen-Datei von der Whitelist, die La auszuschließen Ravel definiert.

<filter> 
    <whitelist processUncoveredFilesFromWhitelist="true"> 
     <directory suffix=".php">./app/API</directory> 
     <exclude> 
      <file>./app/API/routes.php</file> 
     </exclude> 
    </whitelist> 
</filter> 

Für mich sieht es so aus, dass, nachdem Sie die Datei der Code Coverage ausschließen sollte gut funktionieren, vorausgesetzt, Sie haben XDebug installiert, die anderen Fassaden geladen werden ganz gut, so vermute ich, das eine in routes.php doesn t, weil das früher im Lebenszyklus von Laravel geladen wurde.

Hoffe das hilft jemandem in der Zukunft :)