2016-04-30 4 views
1

ich bin neu in phpunit testen und hat einen sehr einfachen test auf status code.phpunit test läuft, seiten laden im browser scheitert in Symfony 2

Der Test besteht, wenn ich laufe:

bin\phpunit -c app src\AppBundle\Tests\Controller\StarLinX\TravelControllerTest.php 
PHPUnit 4.6.10 by Sebastian Bergmann and contributors. 
Configuration read from C:\PhpstormProjects\dir\app\phpunit.xml.dist 

. 

Time: 6.03 seconds, Memory: 20.00Mb 

OK (1 test, 1 assertion) 

Aber wenn ich die Seite im Browser geladen wird, wird eine Ausnahme mit dem Statuscode-Rendering den Zweig Datei geworfen 500.

ich vielleicht dachte, das war ein Cache-Problem, also habe ich den Cache in --env = dev, prod und test gelöscht.

Wie behebe ich diesen Fehler?

Dies ist meine Test-Datei:

namespace AppBundle\Tests\Controller\StarLinX; 
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 
class TravelControllerTest extends WebTestCase { 
    public function testGET() { 
    // Create a new client to browse the application 
    $client = static::createClient(); 

    // get the page 
    $crawler = $client->request('GET', '/travel/aaaaa'); 
    $this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET /travel/aaaaa"); 

    } 
} 

Dies ist der Fehler, die ausgelöst wird, wenn in der Entwickler-Umgebung ausgeführt wird:

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") 

So nach einer wenig mehr Analyse, finde ich, dass der Fehler um {{ weatherInfo }}, die {{ weatherInfo.now }} sein sollte. Dies führt zu einem Fehler beim Ausführen der Entwicklungsumgebung. In der Produktion zeigt Zweig einfach Array an.

Ist das normales Verhalten?

Antwort

0

Da es Ihren Test geschrieben hat, überprüfen Sie nur den Fehlerstatus, der Test ist nicht spezifisch genug. Was, wenn es eine andere Seite anzeigt? Der Test würde noch bestehen.


Sie einige anderen Tests, damit die Seite richtig angezeigt wird, um sicherzustellen, sollten hinzufügen:

// … 
$this->assertEquals(200, $client->getResponse()->getStatusCode(), 
    "Unexpected HTTP status code for GET /travel/aaaaa"); 

// Check that the page has a title. 
$this->assertSame(
    1, 
    $crawler->filter('title')->count() 
); 
// Check that the page has a correct title. 
$this->assertSame(
    'Travel', 
    $crawler->filter('title')->text() 
); 

// Check something in the content 
$this->assertSame(
    'Hello, World!', 
    $crawler->filter('body > div#content')->text() 
); 

Wenn Sie genügend Informationen, um Ihren Code nicht haben zu debuggen, tou zugreifen kann zum Seiteninhalt, der normalerweise die Fehlermeldung enthält:

+0

Das einzige Problem mit Ihren hinzugefügten Tests ist, dass die Seite immer noch bestehen. Warum wirft Zweig einen Fehler für ein Array in Dev, aber nicht in prod? – ScottGutman

+0

@ScottGutman * Das einzige Problem mit Ihren hinzugefügten Tests ist, dass die Seite noch bestehen würde * Die 2 letzten Behauptungen sollten fehlschlagen, wenn ein Fehler auftritt. –

+0

@ScottGutman In prod, Twig Fehler ausblenden, weil der Debug-Modus aktiviert ist (es ist besser, Ausnahmen zu verstecken als * die Seite zu brechen). Aber Sie sollten den Fehler in der Protokolldatei 'app/logs/prod.log' sehen. –

Verwandte Themen