2016-04-11 9 views
1

Dies ist zusätzlich zu dieser Frage:Testing umgeleitet url

Testing loging in with Behat

public function __construct() 
{ 
    // Choose a Mink driver. More about it in later chapters. 
    $driver = new GoutteDriver(); 
    $this->session = new Session($driver); 

} 

ich einige Dinge ausprobiert:

// if ($this->session->getCurrentUrl() != UserController::APP_URL) { 

    $headers = $this->session->getResponseHeaders(); 

    print_r($headers); 
    if (empty($headers['Location']) && empty($headers['location'])) { 
      throw new Exception('Login failed: ' . json_encode($headers)); 
    } 

getCurrentUrl() gibt nicht die URL, die umgeleitet wird. (Feature ist implementiert und Redirect funktioniert).

Header-Speicherort ist nicht vorhanden. Der Test schlägt fehl, wenn er bestanden wird.

Was ist los?

Antwort

0

Das Problem war, mit url ich aufhängte - es war falsch, zunächst völlig falsch, dann ähnlich, aber immer noch falsch:

$this->session->getDriver()->getClient() 
      ->request('POST', static::BASE_URL . '/user/registration', $this->getFormArray()); 

ich diesen Code nicht in Frage habe zu veröffentlichen, weil ich es nicht gedacht war relevant. Es war so schwer zu sehen, Fehler - nach dem Wort "Registrierung" gab es keinen Schrägstrich am Ende.

Aber ich wurde mit symfony 3 und für die Methode hatte ich definierte Strecke

@Route("/user/registration/", name="registration") 

mit Schrägstrich am Ende. Vom Browser hat es funktioniert, weil der Browser weiß, wie man damit umgeht. Ich habe nicht einmal gedacht, dass es einen Unterschied in der Route gibt - ist es mit Schrägstrich oder ohne Schrägstrich während meiner 4-5 Jahre Web-Entwicklung, hatte nie ein solches Problem.

Also nicht die richtige Route - keine Weiterleitung.

Location-Header ist immer noch nicht gefunden, weil jetzt Seite bereits umgeleitet wird, aber

$this->session->getCurrentUrl() 

ist nun korrekt.

0

Es gibt Restler, ein Mikro-Framework, das Verhalten Driven API Tests mit Behat und Guzzle unterstützt.

Es enthält Redirect class für die Umleitung. Um jedoch die Umleitung zu testen, müssen Sie in der Antwort nach dem Header Location suchen, z.

Scenario: Test for Location in the header 
    When I request "/some_url" 
    Then the response "Location" header should be "/some_other_url"