2014-12-03 12 views
5

Ho un controller che, dopo la presentazione di una e-mail, effettua un redirect alla home, in questo modo:laravel - Testing ciò che accade dopo un reindirizzamento

return Redirect::route('home')->with("message", "Ok!"); 

scrivo i test per esso, e io non sono sicuri come fare PHPUnit per seguire il reindirizzamento, per testare il messaggio di successo:

public function testMessageSucceeds() { 
    $crawler = $this->client->request('POST', '/contact', ['email' => '[email protected]', 'message' => "lorem ipsum"]); 

    $this->assertResponseStatus(302); 
    $this->assertRedirectedToRoute('home'); 

    $message = $crawler->filter('.success-message'); 

    // Here it fails 
    $this->assertCount(1, $message); 
} 

Se io sostituire il codice sul controller per questo, e rimuovere il primo 2 afferma, funziona

Session::flash('message', 'Ok!'); 
return $this->makeView('staticPages.home'); 

Ma mi piacerebbe usare lo Redirect::route. C'è un modo per rendere PHPUnit per seguire il reindirizzamento?

risposta

6

Si può dire crawler di seguire un redirect in questo modo:

$crawler = $this->client->followRedirect(); 

così nel tuo caso, che sarebbe qualcosa di simile:

public function testMessageSucceeds() { 
    $this->client->request('POST', '/contact', ['email' => '[email protected]', 'message' => "lorem ipsum"]); 

    $this->assertResponseStatus(302); 
    $this->assertRedirectedToRoute('home'); 

    $crawler = $this->client->followRedirect(); 

    $message = $crawler->filter('.success-message'); 

    $this->assertCount(1, $message); 
} 
7

È possibile ottenere PHPUnit per seguire i reindirizzamenti con $this->followRedirects();

+5

Questa funzione è stata rimossa da laravel> = 5.4.12 e puoi utilizzare [questo] (https://github.com/laravel/framework/issues/18016) soluzione alternativa. –

Problemi correlati