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

Метод getCookieJar

Метод getCookieJar класса KernelBrowser возвращает объект CookieJar, который хранит все куки, установленные в ходе выполнения тестовых запросов. Через этот объект можно читать, добавлять и удалять куки вручную, не выполняя реальный HTTP-запрос. Метод не принимает параметров и всегда возвращает один и тот же объект для текущего клиента.

Синтаксис

public function getCookieJar(): CookieJar

Пример

Давайте создадим клиент через createClient, выполним запрос к контроллеру, который устанавливает куку, и прочитаем её через getCookieJar:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $response = new Response('hello'); $response->headers->setCookie(new Cookie('user', 'abcde')); return $response; } } ?>

Теперь напишем тест, который читает значение куки:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ArticleControllerTest extends WebTestCase { public function testCookie(): void { $client = static::createClient(); $client->request('GET', '/article'); $cookieJar = $client->getCookieJar(); $cookie = $cookieJar->get('user'); echo $cookie->getValue(); } } ?>

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

"abcde"

Пример

Давайте добавим куку вручную через getCookieJar до выполнения запроса. Так можно эмулировать уже авторизованного пользователя:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(Request $request): Response { $user = $request->cookies->get('user', 'guest'); return new Response($user); } } ?>

Теперь тест, который устанавливает куку вручную:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\BrowserKit\Cookie; class ArticleControllerTest extends WebTestCase { public function testManualCookie(): void { $client = static::createClient(); $cookieJar = $client->getCookieJar(); $cookieJar->set(new Cookie('user', 'abcde')); $client->request('GET', '/article'); echo $client->getResponse()->getContent(); } } ?>

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

"abcde"

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

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