2015-03-01 21 views
8

POST çağrısı Laravel'e test etmek için aşağıdakileri yapıyorum. Bu POST'un rotalarıma göre soruların mağaza eylemi yöntemi olarak gönderilmesini bekliyorum. Bu tarayıcıda çalışır.Laravel'de POST rotaları nasıl test edilir

Benim testi:

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

     Session::start(); 
    } 

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

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

Ancak, yönlendirme uymadığını söylüyor. Ayrıca, mağaza eylem yöntemine hiç gitmediğini görebiliyorum. Hangi işlem yönteminin kullanılacağını ve neden mağaza yöntemine gitmeyeceğini bilmek istiyorum (rotaya baktığımda: listeyi görebilirsiniz. ayrıca tarayıcıda çalışır, ancak testlerimde değil). Ayrıca, bu kaynak için çağrıyı doğru şekilde yazıyorum? Buradaki belirtimi eklediğim gibi ekledim, bazı testlerde belirteç kontrolüne izin vereceğim.

+0

Eğer gerçek hata açıklaması sağlayabilir, teşekkür –

+1

sizin POST parametreleri sadece csrf olmasına benzemez jeton. Muhtemelen kontrolörünüzde, isteğin bir önceki konuma (302 yanıt kodu) yeniden yönlendirilmesini sağlayan bir tür doğrulama vardır. Bu durumun dd (Session :: get ('errors')) ' – mauricius

cevap

0

Rotalarınızı sınamanız için en çok önerilen yöntem 200 yanıtını kontrol etmektir. Birden çok sınaması olduğunda, post rotanızın tümünü bir kerede kontrol ettiğiniz için bu çok yararlıdır.

yapmak için

yüzden, sadece kullanın:

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

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

ile hata ayıklaması yapılıp yapılmadığını kontrol edebilirsiniz. Ancak bu işlem 200 kodu döndürmez, kullanıcıyı yönlendiriyorum (30x) ve I Doğru URL'ye gittiklerini (soruları) doğrulamak istiyorum. – Martyn

2

Bu deneyebilirsiniz:

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