Метод assertSent
Метод assertSent применяется к экземпляру фасада Http для проверки,
был ли отправлен HTTP-запрос, соответствующий указанным критериям. Метод принимает
замыкание, в котором можно задать условия для проверки запроса, или имя класса
запроса. Если запрос не был отправлен или не соответствует условиям, тест проваливается.
Метод обычно используется в связке с Http::fake для тестирования внешних HTTP-вызовов
в приложении.
Синтаксис
<?php
use Illuminate\Support\Facades\Http;
Http::assertSent(Closure $callback);
Http::assertSent(string $class);
?>
Первый параметр - замыкание, которое получает объект запроса и должно вернуть true
при успешной проверке. Второй вариант - имя класса запроса, которое будет проверено
на соответствие.
Пример
Давайте проверим, что в тесте был отправлен GET-запрос на указанный URL:
<?php
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
class ApiTest extends TestCase
{
public function test_http_request_sent()
{
Http::fake();
Http::get('https://api.example.com/users');
Http::assertSent(function ($request) {
return $request->url() == 'https://api.example.com/users' &&
$request->method() == 'GET';
});
}
}
?>
Пример
Проверим, что был отправлен POST-запрос с определёнными данными:
<?php
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
class ApiTest extends TestCase
{
public function test_post_request_with_data()
{
Http::fake();
Http::post('https://api.example.com/users', [
'name' => 'John',
'email' => 'john@example.com'
]);
Http::assertSent(function ($request) {
return $request->url() == 'https://api.example.com/users' &&
$request['name'] == 'John' &&
$request['email'] == 'john@example.com';
});
}
}
?>
Пример
Проверим, что запрос был отправлен с определёнными заголовками:
<?php
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
class ApiTest extends TestCase
{
public function test_request_with_headers()
{
Http::fake();
Http::withHeaders([
'Authorization' => 'Bearer token123',
'Accept' => 'application/json'
])->get('https://api.example.com/users');
Http::assertSent(function ($request) {
return $request->hasHeader('Authorization', 'Bearer token123') &&
$request->hasHeader('Accept', 'application/json');
});
}
}
?>
Пример
Проверим количество отправленных запросов с помощью assertSent:
<?php
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
class ApiTest extends TestCase
{
public function test_multiple_requests_count()
{
Http::fake();
Http::get('https://api.example.com/users');
Http::get('https://api.example.com/users');
Http::get('https://api.example.com/posts');
$usersRequests = Http::assertSent(function ($request) {
return str_contains($request->url(), '/users');
});
$res = $usersRequests;
echo $res;
}
}
?>
Результат выполнения кода:
"2"
Пример
Проверим, что запрос не был отправлен с помощью отрицания:
<?php
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
class ApiTest extends TestCase
{
public function test_request_not_sent()
{
Http::fake();
Http::get('https://api.example.com/users');
$res = Http::assertSent(function ($request) {
return $request->url() == 'https://api.example.com/posts';
});
// Запрос на /posts не отправлялся, поэтому assertSent вернет false
echo $res ? "true" : "false";
}
}
?>
Результат выполнения кода:
"false"
Смотрите также
-
метод
fake,
который создаёт поддельный HTTP-клиент для тестирования -
класс
Http,
который предоставляет API для HTTP-тестирования -
класс
TestCase,
который является базовым классом для всех тестов Laravel -
класс
RefreshDatabase,
который сбрасывает состояние базы данных между тестами