2015-03-01 16 views
8

Wykonuję następujące czynności, aby przetestować wywołanie POST do Laravel. Spodziewam się, że POST na pytania, zgodnie z moimi trasami, będzie wysyłane jako metoda akcji sklepu. Działa to w przeglądarce.Jak testować trasy POST w Laravel

Moje testy:

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

     Session::start(); 
    } 

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

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

Jednakże, mówi mi, że przekierowanie nie pasuje. Ponadto widzę, że w ogóle nie chodzi o metodę działania sklepu. Chcę wiedzieć, jaka metoda działania ma zamiar, i dlaczego nie idzie do metody przechowywania (jeśli spojrzę na trasę: lista widzę, że jest POST pytania/trasy, które powinny przejść do questions.store; to działa również w przeglądarce, ale nie w moich testach). Ponadto, czy poprawnie piszę wezwanie do tego zasobu? Dodałem token tutaj, ponieważ był to wyjątek, tak jak powinien, w niektórych testach pozwolę, aby test tokena minął.

+0

można zapewnić rzeczywisty opis błędu, dzięki –

+1

Jest mało prawdopodobne, że parametry POST są tylko csrf znak. Prawdopodobnie w twoim kontrolerze masz jakąś walidację, która sprawia, że ​​żądanie przekierowania z powrotem do poprzedniej lokalizacji (kod odpowiedzi 302). Możesz to sprawdzić, debugując sesję za pomocą 'dd (Session :: get ('errors'))' – mauricius

Odpowiedz

0

Najbardziej zalecanym sposobem przetestowania tras jest sprawdzenie odpowiedzi na 200. Jest to bardzo pomocne, gdy masz wiele testów, na przykład sprawdzasz wszystkie trasy na raz.

Aby to zrobić, wystarczy użyć:

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

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

Ale ta akcja nie zwraca 200 kodu, przekierowuję użytkownika (30x) i I chcesz potwierdzić, że podszedł do prawidłowego adresu URL (pytania). – Martyn

2

Można spróbować to:

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