2015-11-30 3 views
9

Как я могу запустить веб-сайт снова с API? по умолчанию руководство в отношении функциональных тестов только дать следующую команду:Symfony web test case JSON

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

Класс Гусеничный является DOM-обходчик. Я проверил ссылку для класса FrameworkBundle \ Client, и я не смог найти метод, который позволит мне сделать запрос, который возвращает raw Response. По крайней мере, так, я смогу json_decode вывод и выполнить мои тесты.

Что я могу использовать для достижения этого?

ответ

14

После того, как вы выполните $client->request(...) звонок, вы можете сделать $client->getResponse(), чтобы получить ответ сервера.

Вы можете утверждать, код состояния и проверить его содержимое, например:

$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 пучок обеспечивает additional helpers to test JSON. Для проверки равенства уже есть встроенное утверждение для этой цели:

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

Обратите внимание, что assertJsonStringEqualsJsonString утверждения будет брать плату за нормализацию обоего $expectedJson и $response строк.

0

Существует метод PHPUnit \ Framework \ Assert :: assertJson() с this commit Вы также можете протестировать 'Content-Type' ответа.

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