2016-04-27 10 views
0

In symfony 3-Controller-Datei habe ich Funktion:Behat 3 Nerz Test Umleitung

/** 
    * @Route("/user/registration", name="post_registration") 
    * @Method("POST") 
    * @return mixed 
    */ 
    public function postRegistration() 
    { 
     $post = $this->getAllPost(); 

     $this->curl = $this->get('ApiClient'); 

     $responseArray = $this->curl->post(
      $this->container->getParameter('api_url') . '/users', 
      $post 
     ); 

     if (isset($responseArray['api_key'])) { 
      return $this->redirectResponseWithCookie($responseArray['api_key']); 
     } else { 

      return $this->render(
       static::REGISTRATION_TEMPLATE, 
       ['errors' => $responseArray['errors']] 
      ); 
     } 
    } 

In einem Teil ruft Funktion

redirectResponseWithCookie() 

, die die Seite umleiten soll.

Ich möchte Umleitungsheader testen - hat es den richtigen Location-Wert.

Ich habe Funktion in UserRegistrationContext Klasse

class UserRegistrationContext extends BaseContext implements Context, SnippetAcceptingContext 
{ 

/** 
* @When I register successfully into the system 
* @return null 
*/ 
public function iRegisterSuccessfullyIntoTheSystem() 
{ 

    $this->canIntercept(); 
    $this->session->getDriver()->getClient()->followRedirects(false); 

    // Enters his data 
    // Posts to www.notification.guru . 
    $this->session->getDriver()->getClient() 
     ->request('POST', $this->baseUrl . '/user/registration', $this->getFormArray()); 

    echo 'test'; 

} 
} 

BaseContext Klasse nur einige Hilfsfunktionen, seine contructor inits Sitzung:

$driver = new GoutteDriver(); 
$this->session = new Session($driver); 

dieser Teil könnte falsch sein:

$this->session->getDriver()->getClient()->followRedirects(false); 

Ich habe gerade Code von Behat 2.5 genommen und versucht, es mit Behat 3 zu arbeiten, aber nicht sicher, ob es korrekt ist, aber zumindest keinen Fehler wirft.

Es sollte aufhören umleiten, so dann mit, ich könnte eine Antwort-Header erhalten

getResponseHeaders() 

Aber das Problem ist, dass es die Umleitung versucht und Code fehlschlägt, weil echte Website nicht lauched ist noch, wo es umleitet. Und ich wäre auch nicht in der Lage, Header nach einer echten Umleitung zu testen.

Also muss die Umleitung gestoppt werden, denke ich.

Wie geht das? Ich kann keine Informationen finden.

Test nicht an der Linie

$this->session->getDriver()->getClient() 
     ->request('POST', $this->baseUrl . '/user/registration', $this->getFormArray()); 
+0

Eigentlich einen Test nach dem Ausführen ich sehe, gibt es keinen Fehler in diesem Code, ich nicht gut in der Konsole gesehen habe. –

Antwort

1

So Code in meiner Frage nicht falsch ist, wie ich in Kommentar gesagt - ich nicht gut in der Konsole gesehen habe. Oft passiert es, dass wenn ich auf SO poste, ich die Frage noch nicht einmal fertig geschrieben habe, nur weil ich die Details an andere geschrieben habe, sehe ich die Antwort.

$this->session->getDriver()->getClient()->followRedirects(false); 

funktioniert gut.

So zu beenden, wie Sie überprüfen - Funktion so etwas wie dies machen und es nennt:

/** 
* @param Behat\Mink\Session $session - mink session 
* @throws \Exception 
* @return null 
*/ 
public function isLoggedIntoApi($session) 
{ 
    $headers = $session->getResponseHeaders(); 

    if ($headers['Location'][0] != $this->appUrl) { 
     throw new \Exception(
      'User is not redirected to ' . $this->appUrl 
     ); 
    } 
}