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