2016-03-25 6 views
1

Ich arbeite für ein Unternehmen. Ich weiß, wie PHPUnit-Tests auf Vagabunden-Box ausgeführt werden. Aber ich weiß nicht, warum ich keinen Test auf ihrer vagabundierenden Box ausführen kann, die mit Chefkoch konfiguriert wurde. Immer, wenn ich PHPUnit Befehl leite, ich bin unten Störung zu erhalten:Kann keinen Test auf Vagrant Box mit PHPUnit

There was 1 failure: 

1) ExampleTest::testBasicExample 
A request to [en/contact] failed. Received status code [404]. 

/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:178 
/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:72 
/..../vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:53 
/..../tests/ExampleTest.php:16 

Caused by 
ErrorException: Cannot modify header information - headers already sent by (output started at /..../vendor/phpunit/phpunit/src/Util/Printer.php:133) in /..../app/Http/Middleware/SetCookieData.php:17 

Jede Hilfe wird sehr beträchtlich sein.

Antwort

2

Ihr Test läuft einwandfrei. In Ihrem Beispieltest haben Sie einen Anruf an visit('en/contact') getätigt. Es hat versucht, diese URL zu besuchen, aber anstelle von 200 wurde eine 404 erstellt. Die angezeigte Anzeige ist das Ergebnis des Tests, der versucht, diese URL aufzurufen.

Das Problem ist, dass Ihr Code in app/Http/Middleware/SetCookieData.php versucht, die Header zu ändern (mithilfe der header()-Funktion), aber PHPUnit hat bereits Ausgabe in STDOUT geschrieben. Also, PHP wirft einen Fehler, dass Sie versuchen, Kopfzeilen nach dem Schreiben der Ausgabe zu ändern.

Es gibt ein paar Antworten [1] [2] [3] für dieses Problem bereits, aber hier zusammenfassen:

  1. Run PHPUnit mit der --stderr Option (oder fügen Sie stderr="true" zu Ihrem phpunit.xml). Auf diese Weise schreibt PHPUnit nach STDERR, damit sich PHP nicht darüber beschweren muss, dass es bereits in STDOUT geschrieben wurde. Dies ist wahrscheinlich die einfachste Option.

  2. Versuchen Sie, die @runInSeparateProcess Annotation für Ihren Test zu verwenden. Allerdings können Sie aufgrund der Komplexität des Frameworks auf Probleme stoßen. Darüber hinaus werden Sie wahrscheinlich viele Tests benötigen, die diese Annotation benötigen, und das wird ressourcenintensiv sein.

    /** 
    * @runInSeparateProcess 
    */ 
    public function testBasicExample() 
    { 
        // visit('en/contact'); 
    } 
    
  3. Run PHPUnit mit dem --process-isolation Flag (oder processIsolation="true" zu Ihrem phpunit.xml hinzufügen). Wahrscheinlich die gleichen Probleme wie die @runInSeparateProcess Annotation.

  4. Mock die eingebaute header() Funktion, um nicht tatsächlich Header zu senden. Dies kann jedoch die Reaktion Ihrer Seiten verändern, so dass Sie wahrscheinlich mehr Testcode schreiben müssen.

Referenzen:

+0

Aber die Seite rechts ist. Ich kann die URL durchsuchen. Warum gibt es 404 Fehler, das ist meine Frage. –

+0

@WilliamFrancisGomes Ich habe meine Antwort aktualisiert. – patricus

+0

Vielen Dank. Wird überprüfen und Sie wissen lassen. –

Verwandte Themen