2015-11-30 24 views
9

Jak uruchomić webtestcase z interfejsem API? Domyślny przewodnik dotyczący testów funkcjonalnych zawiera tylko następujące polecenie:Testowy futerał Symfony JSON

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

Klasa Crawler to robot indeksujący DOM. Sprawdziłem odwołanie do klasy FrameworkBundle \ Client i nie mogłem znaleźć metody, która pozwoli mi wykonać żądanie zwracające surową odpowiedź. Przynajmniej w ten sposób, będę w stanie json_decode danych wyjściowych i zrobić moje testy.

Co mogę użyć, aby to osiągnąć?

Odpowiedz

14

Po wykonaniu połączenia $client->request(...) można wykonać $client->getResponse(), aby uzyskać odpowiedź serwera.

Następnie można twierdzić, kod stanu i sprawdzić jego zawartość, na przykład:

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

willdurand/rest-extra-bundle pakiet zapewnia additional helpers to test JSON. Aby przetestować równość jest już wbudowany twierdzenie do tego celu:

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); 

Zauważ, że assertJsonStringEqualsJsonString twierdzenie weźmie za normalizację zarówno $expectedJson i $response strun.

0

Istnieje metoda PHPUnit \ Framework \ Assert :: assertJson() od this commit Można również przetestować "Typ zawartości" odpowiedzi.

$response = $client->getResponse(); 
$this->assertTrue($response->headers->contains('Content-Type', 'application/json')); 
$this->assertJson($response->getContent()); 
$responseData = json_decode($response->getContent(), true);