2015-03-01 12 views
8

Sto facendo quanto segue per testare una chiamata POST a Laravel. Mi aspetto che il POST per le domande, in conformità con i miei percorsi, sarà dispacci come metodo di azione del negozio. Funziona nel browser.Come testare le rotte POST in Laravel

La mia prova:

public function setUp() 
    { 
     parent::setUp(); 

     Session::start(); 
    } 

    public function testStoreAction() 
    { 
     $response = $this->call('POST', 'questions', array(
      '_token' => csrf_token(), 
     )); 

     $this->assertRedirectedTo('questions'); 
    } 

Tuttavia, mi dice che il reindirizzamento non corrisponde. Inoltre, posso vedere che non sta andando affatto al metodo di azione del negozio. Voglio sapere che metodo di azione sta per, e perché non sta andando al metodo store (se guardo il percorso: elenco posso vedere che c'è una domanda/percorso POST che dovrebbe andare a questions.store; funziona anche nel browser, ma non nei miei test). Inoltre, sto scrivendo correttamente la chiamata per questa risorsa? Ho aggiunto il token qui mentre lanciava un'eccezione come dovrebbe, in alcuni test lascerò passare il token check.

+0

è possibile fornire la descrizione reale dell'errore, grazie –

+1

E 'improbabile che i parametri POST sono solo il CSRF gettone. Probabilmente nel tuo controller hai una sorta di convalida che rende la richiesta di reindirizzamento alla posizione precedente (302 codice di risposta). È possibile verificare se questo è il caso eseguendo il debug della sessione con 'dd (Session :: get ('errors'))' – mauricius

risposta

0

Il modo più consigliato per testare i percorsi è verificare la risposta 200. Questo è molto utile quando hai più test, come se stessi verificando tutti i tuoi percorsi post contemporaneamente.

Per farlo, basta usare:

public function testStoreAction() 
{ 
    $response = $this->call('POST', 'questions', array(
     '_token' => csrf_token(), 
    )); 

    $this->assertEquals(200, $response->getStatusCode()); 
} 
+1

Ma questa azione non restituisce un codice 200, sto reindirizzando l'utente (30x) e io voglio confermare che sono andati all'URL corretto (domande). – Martyn

2

Si potrebbe provare questo:

public function testStoreAction() 
{ 
    Session::start(); 
    $response = $this->call('POST', 'questions', array(
     '_token' => csrf_token(), 
    )); 
    $this->assertEquals(302, $response->getStatusCode()); 
    $this->assertRedirectedTo('questions'); 
}