Метод withHeaders
Метод withHeaders применяется к тестовому HTTP-клиенту Laravel
и позволяет задать произвольные заголовки для выполняемого запроса.
Метод принимает один параметр - ассоциативный массив, где ключи -
это имена заголовков, а значения - их содержимое.
Метод возвращает экземпляр тестового клиента для цепочки вызовов.
Синтаксис
<?php
$this->withHeaders($headers)->get($uri);
?>
Пример
Давайте отправим GET-запрос с кастомным заголовком X-Requested-With
для имитации AJAX-запроса:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_ajax_request()
{
$headers = [
'X-Requested-With' => 'XMLHttpRequest',
];
$res = $this->withHeaders($headers)
->get('/api/users');
$res->assertOk();
}
}
?>
Пример
Отправим запрос с Bearer-токеном для аутентификации через API:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ApiTest extends TestCase
{
public function test_authenticated_request()
{
$token = 'your-secret-api-token';
$headers = [
'Authorization' => 'Bearer ' . $token,
'Accept' => 'application/json',
];
$res = $this->withHeaders($headers)
->get('/api/protected-data');
$res->assertStatus(200);
$res->assertJson(['status' => 'success']);
}
}
?>
Пример
Отправим POST-запрос с указанием типа содержимого и кастомным заголовком:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class PostTest extends TestCase
{
public function test_post_with_custom_headers()
{
$headers = [
'Content-Type' => 'application/xml',
'X-API-Key' => 'abc123xyz',
];
$data = '<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>John Doe</name>
<email>john@example.com</email>
</user>';
$res = $this->withHeaders($headers)
->post('/api/users', $data);
$res->assertCreated();
$res->assertHeader('Content-Type', 'application/json');
}
}
?>
Пример
Отправим запрос с несколькими заголовками, включая параметры локализации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class LocalizationTest extends TestCase
{
public function test_request_with_locale_header()
{
$headers = [
'Accept-Language' => 'ru',
'X-Timezone' => 'Europe/Moscow',
'User-Agent' => 'Laravel-Test/1.0',
];
$res = $this->withHeaders($headers)
->get('/api/articles');
$res->assertOk();
$content = $res->json();
$res->assertJsonPath('locale', 'ru');
}
}
?>
Смотрите также
-
метод
withToken,
который упрощает установку Bearer-токена -
метод
get,
который выполняет GET-запрос в тестах -
метод
post,
который выполняет POST-запрос в тестах -
метод
assertHeader,
который проверяет наличие заголовка в ответе