Symfony web тестовый случай JSON

Как я могу запустить webtestcase agains API? Руководство по умолчанию, касающееся функциональных тестов, дает только следующую команду:

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

класс искателя является искателем DOM. Я проверил ссылку на класс FrameworkBundleClient и не смог найти метод, который позволит мне сделать запрос, возвращающий необработанный ответ. По крайней мере, таким образом, я смогу json_decode вывод и выполнять свои тесты.

что я могу использовать, чтобы достичь этого?

3 ответов


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

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

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

на willdurand / rest-extra-bundle связка обеспечивает дополнительные помощники для тестирования 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 строки.


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

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