2015-11-30 21 views
9

Tôi làm cách nào để chạy lại webtestcase một API? Hướng dẫn mặc định về kiểm tra chức năng chỉ cung cấp lệnh sau:Trường hợp thử nghiệm web Symfony JSON

$client = static::createClient(); 
$crawler = $client->request('GET', '/some-url'); 

Lớp trình thu thập thông tin là trình thu thập thông tin DOM. Tôi đã kiểm tra tham chiếu cho lớp FrameworkBundle \ Client và tôi không thể tìm thấy một phương thức cho phép tôi thực hiện một yêu cầu trả về đáp ứng thô. Ít nhất theo cách đó, tôi sẽ có thể json_decode đầu ra và làm bài kiểm tra của tôi.

Tôi có thể sử dụng những gì để đạt được điều này?

Trả lời

14

Sau khi thực hiện cuộc gọi $client->request(...), bạn có thể thực hiện $client->getResponse() để nhận phản hồi của máy chủ.

Sau đó bạn có thể khẳng định mã trạng thái và kiểm tra nội dung của nó, ví dụ:

$client->request('GET', '/my-url'); 
$response = $client->getResponse(); 
$this->assertSame(200, $response->getStatusCode()); 
$responseData = json_decode($response->getContent(), true); 
// etc... 
2

Gói willdurand/rest-extra-bundle cung cấp additional helpers to test JSON. Để kiểm tra sự bình đẳng đã có một built-in khẳng định cho mục đích này:

use Bazinga\Bundle\RestExtraBundle\Test\WebTestCase as BazingaWebTestCase; 

// ... 

$client->request('GET', '/my-url'); 
$response = $client->getResponse(); 
$this->assertJsonResponse($response, Response::HTTP_OK); 
$this->assertJsonStringEqualsJsonString($expectedJson, $response); 

Lưu ý rằng assertJsonStringEqualsJsonString khẳng định sẽ chịu trách nhiệm bình thường của cả hai $expectedJson$response chuỗi.

0

Có phương thức PHPUnit \ Framework \ Assert :: assertJson() kể từ this commit Bạn cũng có thể kiểm tra 'Loại nội dung' phản hồi.

$response = $client->getResponse(); 
$this->assertTrue($response->headers->contains('Content-Type', 'application/json')); 
$this->assertJson($response->getContent()); 
$responseData = json_decode($response->getContent(), true); 
Các vấn đề liên quan