2016-11-11 3 views
1

Ich habe zu ignorieren, was ich denke, ist eine ungewöhnliche Frage, aber ich werde versuchen, so klar wie möglich zu erklären. Ich habe einen einfachen Handwerker Befehl erstellt, der dies Dies könnteAufruf PHPUnit von Artisan Befehl wird die XML-Datei

/** 
* Execute the console command. 
*/ 
public function handle() 
{ 
    $this->info("==> Cleaning up reports and docs..."); 

    $command = new Process("rm -f tests/docs/* && rm -rf test/reports/*"); 
    $command->run(); 

    $this->warn("==> Reports and docs are clean"); 

    $this->info("==> Executing Tests Suite..."); 
    $command = new Process("vendor/bin/phpunit --coverage-html tests/reports --testdox-html tests/docs/reports.html -v --debug"); 
    $command->run(); 
    $this->info($command->getIncrementalOutput()); 

    $this->warn("==> report generated >> test/reports. Documentation generated >> test/docs/reports.html"); 
} 

tut scheint irgendwie seltsam, aber es ist eigentlich ziemlich nützlich, es zu starten, die PHPUnit mit der Abdeckung Unterstützung und anderen Sachen. Das Problem ist, dass, wenn ich diesen Befehl wie php artisan ludo237:full-test läuft es vollständig die phpunit.xml tatsächlich ignorieren wird es sagen, angezeigt und Fehler, dass die MySQL-Datenbank nicht existiert, obwohl ich die SQLite-Verbindung in meinem phpunit.xml Sprechen eingestellt haben, von denen können Sie deutlich sieht, dass richtig ist:

<?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 suffix="Test.php">./tests</directory> 
     </testsuite> 
    </testsuites> 
    <filter> 
     <whitelist processUncoveredFilesFromWhitelist="true"> 
      <directory suffix=".php">./app</directory> 
     </whitelist> 
    </filter> 
    <php> 
     <env name="APP_ENV" value="testing"/> 
     <env name="APP_DEBUG" value="true"/> 
     <env name="APP_URL" value="http://localhost:8000"/> 
     <env name="DB_CONNECTION" value="sqlite"/> 
     <env name="DB_DATABASE" value=":memory:" /> 
     <env name="CACHE_DRIVER" value="array"/> 
     <env name="SESSION_DRIVER" value="array"/> 
     <env name="QUEUE_DRIVER" value="sync"/> 
     <env name="MAIL_DRIVER" value="log"/> 
     <env name="MAIL_PRETEND" value="true"/> 
    </php> 
</phpunit> 

ich weiß, dass ich einfach einen bash-Alias ​​für die Befehlszeile erstellen, in der Tat ist dies meine aktuelles Hot-Fix ist, aber an diesem Punkt bin ich nur neugierig, zu verstehen, warum, wenn Ich starte den Befehl phpunit vom Befehl artisan, der die XML-Datei ignoriert.

Hat jemand eine Ahnung davon? Vielen Dank!

Antwort

1

Es hat mich wirklich viel, dies zu debuggen, aber am Ende fand ich, warum es nicht funktioniert.

Zunächst, lassen Sie mich klarstellen, dass nichts falsch mit Ihrem Code ist, auch wenn es nichts mit der Process Klasse falsch ist, erhalten Sie das gleiche Verhalten auch bei Verwendung von nativen exec Funktion.

Zweitens ist die phpunit.xml Datei vollständig gelesen wird, keine Probleme überhaupt.

Gesagt, dass das eigentliche Problem, auf PHPUnit, die Ihnen nicht erlaubt, neu zu definieren (oder überschreiben) jede env-Variable, weil there is a check that prevents that.

Dies liegt daran, Laravel ist nicht die Datei selbst phpunit.xml Parsen, und in dem Moment, es Sie anrufen, ist es schon zu spät und the environment variables are defined, entweder über putenv, $_SERVER und/oder $_ENV.

Aus diesem Grund, I created an Issue on PHPUnit, die auch in den neuesten Versionen (ab heute), dieses Problem bestehen, auch wenn diese was already asked in the past.

Leider habe ich noch keine Lösung für Sie, aber lassen Sie uns unsere Finger kreuzen und wir warten auf PHPUnit das vorgeschlagene force Attribut hinzufügen :)

Mit freundlichen Grüßen, Julian

+1

Danke for.your Aufwand lasst uns Prüfen Sie, ob das Problem aktualisiert wird –

Verwandte Themen