Метод 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,
которая проверяет наличие куки у браузера