РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1084 of 1361 menu

Метод jsonRequest класса KernelBrowser

Метод jsonRequest класса KernelBrowser выполняет HTTP-запрос к приложению, автоматически устанавливая заголовок Content-Type в значение application/json и кодируя переданные данные в формат JSON. Первым параметром передаётся HTTP-метод, вторым - URL, третьим - массив данных, которые будут отправлены в теле запроса.

Синтаксис

$client->jsonRequest(string $method, string $uri, array $parameters = [], array $server = []);

Пример

Давайте создадим контроллер, который принимает JSON-данные и возвращает их обратно:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Attribute\Route; class ApiController extends AbstractController { #[Route('/api/user', name: 'api_user', methods: ['POST'])] public function user(Request $request): JsonResponse { $data = json_decode($request->getContent(), true); return new JsonResponse([ 'name' => $data['name'] ?? null, 'age' => $data['age'] ?? null, ]); } } ?>

Теперь напишем тест, который отправляет JSON-запрос на этот контроллер:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ApiControllerTest extends WebTestCase { public function testUser(): void { $client = static::createClient(); $client->jsonRequest('POST', '/api/user', [ 'name' => 'abcde', 'age' => 30, ]); $response = $client->getResponse(); $content = $response->getContent(); echo $content; } } ?>

Результат выполнения кода:

{"name":"abcde","age":30}

Пример

Давайте проверим, что сервер вернул статус-код 200 и корректный JSON:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ApiControllerTest extends WebTestCase { public function testUserStatus(): void { $client = static::createClient(); $client->jsonRequest('POST', '/api/user', [ 'name' => 'abcde', 'age' => 30, ]); $this->assertResponseIsSuccessful(); $this->assertResponseStatusCodeSame(200); $this->assertResponseFormatSame('json'); } } ?>

Результат выполнения кода:

OK (1 test, 3 assertions)

Пример

Давайте отправим JSON-запрос с дополнительными заголовками через четвёртый параметр:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ApiControllerTest extends WebTestCase { public function testUserWithHeaders(): void { $client = static::createClient(); $client->jsonRequest( 'POST', '/api/user', ['name' => 'abcde', 'age' => 30], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'] ); $response = $client->getResponse(); echo $response->getStatusCode(); } } ?>

Результат выполнения кода:

200

Смотрите также

  • класс KernelBrowser,
    который используется для тестирования HTTP-запросов
  • метод request,
    который выполняет обычный HTTP-запрос
  • метод xmlHttpRequest,
    который выполняет AJAX-запрос
  • метод getResponse,
    который возвращает объект ответа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить