2012-03-28 7 views
1

Ich versuche mich mit PHPUnit-Tests in Kohana vertraut zu machen. Im Moment scheint es Probleme mit Request :: current() -> Umleitungen in meinem Code zu geben.PHPUnit und Kohana Anfrage Objekt

Zum Beispiel versuche ich die Login-Funktionalität zu testen. Sobald sich unser Benutzer erfolgreich angemeldet hat, leiten wir ihn über die oben genannte Umleitungszeile für Anfragen auf seine Startseite um. Das Problem ist, dass, wenn diese Linie da ist, der Test dort zu stoppen scheint und die Ergebnisse nie zurückgibt.

Hier ist, wie meine Tests im Moment geschrieben wird:

class SampleTest extends Kohana_UnitTest_TestCase 
{ 
protected $session; 

public function setUp() { 
    parent::setUp(); 
    $this->session = Session::instance(); 
} 

public function testLogin() 
{ 
    $request = new Request('/login'); 
    $request->method(HTTP_Request::POST) 
     ->post(array('username' => 'username', 'password' => 'password')); 
    $request->execute(); 

    $this->assertEquals($this->session->get('username'), 'password'); 
} 
} 

Wenn ich die folgende Zeile in die Anmeldungs ​​Controller auf Kommentar, alles funktioniert super:

Request::current()->redirect(); //redirect to home 

Was ich tue, falsch ?

Antwort

1

Die Reihenfolge der Operationen für eine Standardanforderung (überprüfen Sie Ihre index.php) ist:

  1. send_headers ausführen
  2. Körper

Sie die Anfrage in der Mitte entführt von Sie führen den Prozess aus und leiten ihn um. Ihr Test folgt einfach diesem Code, da dies alles Teil dieser Ausführung ist.

Stattdessen verschieben Sie Ihre Umleitung durch den Antrag Header hinzufügen, die in send_headers ausgeführt werden sollen, und Sie werden nicht, dass Code in Ihre Unittest getroffen. Ersetzen Sie Ihre Anfrage :: Strom() -> Umleitung() Linie mit der richtigen Art und Weise Benutzern umleiten:

$this->response->headers("Location", URL::site(NULL, TRUE)); 
+0

Vielen Dank! Das war in der Tat das Problem. Funktioniert jetzt wie ein Zauber! :) – Emilie

+0

Eigentlich in Ordnung, für die Umleitung in meiner Anwendung auftritt richtig selbst, ich hatte die folgende Umleitungsleitung zu verwenden: $ this-> response-> Header ("Location", URL :: Website (NULL, TRUE)); – Emilie

+0

Die Antwort auf Ihren Vorschlag wurde korrigiert. – gspatel

0

Ich denke, der beste Weg, um Test-Umleitungen in Kohana die Anforderungs-Klasse mit einem Unittest_Request zu erweitern ist.

eine Umleitung Methode zur Unittest_Request Klasse hinzufügen, die die Location-Header verwendet.

einige Hilfsmethoden Ihre Tests hinzufügen für Unittest-Anfragen unter Verwendung von GET und POST-Anfragen zu erstellen.

schreiben assert Methoden wie assertRedirectedTo, assertResponse .... und so weiter.

Ich weiß, das ist eine Menge, aber es würde Ihnen wirklich in einer längerfristigen helfen.