2015-03-01 29 views
8

tôi đang làm những điều sau đây để kiểm tra cuộc gọi POST để Laravel. Tôi hy vọng rằng POST cho các câu hỏi, phù hợp với các tuyến đường của tôi, sẽ được gửi đi như là phương pháp hành động lưu trữ. Điều này hoạt động trong trình duyệt.tuyến Làm thế nào để kiểm tra POST trong Laravel

thử nghiệm của tôi:

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

     Session::start(); 
    } 

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

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

Tuy nhiên, tôi nói với tôi rằng chuyển hướng không phù hợp. Ngoài ra, tôi có thể thấy rằng nó không phải là đi đến các phương pháp hành động lưu trữ ở tất cả. Tôi muốn biết những gì phương pháp hành động nó sẽ, và lý do tại sao nó không phải là đi đến phương pháp lưu trữ (nếu tôi nhìn vào tuyến đường: danh sách tôi có thể thấy có một câu hỏi POST/tuyến đường mà nên đi đến questions.store; cũng hoạt động trong trình duyệt, nhưng không hoạt động trong các thử nghiệm của tôi). Ngoài ra, tôi có đang viết đúng cuộc gọi cho tài nguyên này không? Tôi đã thêm mã thông báo ở đây vì nó đã ném một ngoại lệ như trong một số thử nghiệm, tôi sẽ để thẻ kiểm tra mã thông báo.

+0

bạn có thể cung cấp các mô tả lỗi thực tế, nhờ –

+1

Nó không chắc rằng các thông số POST của bạn chỉ là những CSRF mã thông báo. Có lẽ trong bộ điều khiển của bạn, bạn có một số loại xác nhận mà làm cho các yêu cầu để chuyển hướng trở lại vị trí trước đó (302 mã phản ứng). Bạn có thể kiểm tra xem đây có phải là trường hợp hay không bằng cách gỡ rối phiên với «dd (Session :: get ('errors'))' – mauricius

Trả lời

0

Cách được khuyến nghị nhất để kiểm tra tuyến đường của bạn là kiểm tra phản hồi 200. Điều này rất hữu ích khi bạn có nhiều thử nghiệm, như bạn đang kiểm tra tất cả các tuyến đường post cùng một lúc.

Để làm như vậy, chỉ cần sử dụng:

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

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

Nhưng hành động này không trả lại mã 200, tôi đang chuyển hướng người dùng (30x) và tôi muốn xác nhận rằng họ đã truy cập đúng URL (câu hỏi). – Martyn

2

Bạn có thể thử này:

public function testStoreAction() 
{ 
    Session::start(); 
    $response = $this->call('POST', 'questions', array(
     '_token' => csrf_token(), 
    )); 
    $this->assertEquals(302, $response->getStatusCode()); 
    $this->assertRedirectedTo('questions'); 
} 
Các vấn đề liên quan