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

Метод fake

Метод Http::fake применяется в тестах для подмены HTTP-клиента. Он перехватывает все исходящие запросы и возвращает заранее определённые ответы, что позволяет тестировать код, зависящий от внешних API, без реальных сетевых вызовов. Первым параметром передаётся URL или массив URL для подмены, вторым - ответ или массив ответов.

Синтаксис

<?php use Illuminate\Support\Facades\Http; Http::fake($url, $response); ?>

Пример

Давайте подменим запрос к API и вернём фиктивный ответ:

<?php use Illuminate\Support\Facades\Http; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class HttpTest extends TestCase { public function test_fake_http_request() { Http::fake([ 'api.example.com/users' => Http::response(['id' => 1, 'name' => 'John'], 200) ]); $res = Http::get('api.example.com/users'); echo $res->json('name'); } } ?>

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

"John"

Пример

Давайте подменим все запросы к API одним фиктивным ответом:

<?php use Illuminate\Support\Facades\Http; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class HttpTest extends TestCase { public function test_fake_all_requests() { Http::fake([ 'api.example.com/*' => Http::response(['status' => 'success'], 200) ]); $res = Http::get('api.example.com/users'); echo $res->json('status'); } } ?>

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

"success"

Пример

Давайте подменим запрос с разными ответами в зависимости от метода:

<?php use Illuminate\Support\Facades\Http; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class HttpTest extends TestCase { public function test_fake_with_different_methods() { Http::fake([ 'api.example.com/users' => Http::response(['id' => 2], 201), 'api.example.com/posts' => Http::response(['title' => 'Test'], 200) ]); $res1 = Http::post('api.example.com/users'); $res2 = Http::get('api.example.com/posts'); echo $res1->json('id') . ' ' . $res2->json('title'); } } ?>

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

"2 Test"

Пример

Давайте используем замыкание для динамического ответа:

<?php use Illuminate\Support\Facades\Http; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class HttpTest extends TestCase { public function test_fake_with_closure() { Http::fake(function ($request) { if ($request->url() === 'api.example.com/users') { return Http::response(['count' => 5], 200); } return Http::response(['error' => 'Not found'], 404); }); $res = Http::get('api.example.com/users'); echo $res->json('count'); } } ?>

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

"5"

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

  • метод assertSent,
    который проверяет, был ли отправлен определённый запрос
  • класс Http,
    который предоставляет методы для тестирования HTTP-запросов
  • метод assertSent,
    который проверяет отправку запроса с определёнными параметрами
  • метод assertSent,
    который позволяет проверить количество отправленных запросов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить