Метод assertResponseHasHeader
Метод assertResponseHasHeader относится к классу
KernelBrowser и проверяет, что в ответе
присутствует указанный HTTP-заголовок. Первым
параметром передаётся имя заголовка в виде строки.
Метод не проверяет значение заголовка, а только факт
его наличия. Если заголовка в ответе нет, тест
падает с ошибкой.
Синтаксис
$client->assertResponseHasHeader(string $headerName)
Пример
Давайте создадим контроллер, который возвращает
ответ с заголовком X-Custom-Header:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
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->set('X-Custom-Header', 'abcde');
return $response;
}
}
?>
Теперь напишем тест, который проверяет наличие этого заголовка:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testHeaderExists(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$client->assertResponseHasHeader('X-Custom-Header');
}
}
?>
Результат выполнения теста:
OK (1 test, 1 assertion)
Пример
Давайте проверим наличие стандартного заголовка
Content-Type в ответе:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/json', name: 'article_json')]
public function json(): JsonResponse
{
return $this->json(['status' => 'ok']);
}
}
?>
Тест проверяет, что заголовок Content-Type присутствует:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testContentTypeHeader(): void
{
$client = static::createClient();
$client->request('GET', '/article/json');
$client->assertResponseHasHeader('Content-Type');
}
}
?>
Результат выполнения теста:
OK (1 test, 1 assertion)
Пример
Давайте убедимся, что тест падает, если заголовка в ответе нет:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testMissingHeader(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$client->assertResponseHasHeader('X-Missing-Header');
}
}
?>
Результат выполнения теста:
Failed asserting that the response has the "X-Missing-Header" header.
Смотрите также
-
метод
assertResponseHeaderSame,
который проверяет значение заголовка ответа -
метод
assertResponseStatusCodeSame,
который проверяет код состояния ответа -
метод
assertResponseIsSuccessful,
который проверяет успешность ответа -
метод
assertResponseFormatSame,
который проверяет формат ответа