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

Класс Http

Класс Http из пространства имён Illuminate\Support\Facades предоставляет удобный интерфейс для тестирования HTTP-клиента Laravel. С его помощью можно подменить реальные HTTP-запросы фейковыми ответами и проверять, какие запросы были отправлены.

Синтаксис

<?php use Illuminate\Support\Facades\Http; Http::fake($callback); Http::assertSent($callback); ?>

Пример

Давайте создадим тест, который проверяет отправку запроса к внешнему API при регистрации пользователя:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Http; use App\Models\User; class UserRegistrationTest extends TestCase { public function test_user_registration_sends_http_request() { Http::fake(); $response = $this->post('/api/register', [ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'password123', ]); Http::assertSent(function ($request) { return $request->url() == 'https://api.external.com/users' && $request->method() == 'POST'; }); $response->assertStatus(201); } } ?>

Пример

Теперь давайте эмулируем конкретный ответ от внешнего API с помощью метода fake:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Http; class ExternalApiTest extends TestCase { public function test_external_api_returns_success() { Http::fake([ 'api.external.com/*' => Http::response([ 'status' => 'success', 'data' => ['id' => 1, 'name' => 'John Doe'] ], 200), ]); $response = $this->getJson('/api/users/1'); $response->assertStatus(200) ->assertJson([ 'status' => 'success', 'data' => ['id' => 1, 'name' => 'John Doe'] ]); Http::assertSentCount(1); } } ?>

Пример

Проверим количество и параметры отправленных запросов с помощью метода assertSent:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Http; use App\Models\Order; class OrderTest extends TestCase { public function test_order_processing_sends_correct_data() { Http::fake(); $order = Order::create([ 'user_id' => 1, 'amount' => 100, 'status' => 'pending', ]); $response = $this->postJson('/api/orders/' . $order->id . '/process'); Http::assertSent(function ($request) use ($order) { return $request->url() == 'https://payment.api/charge' && $request['order_id'] == $order->id && $request['amount'] == 100; }); $response->assertStatus(200); } } ?>

Пример

Эмулируем ошибку от внешнего API и проверяем корректность обработки ошибки в нашем приложении:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Http; class PaymentTest extends TestCase { public function test_payment_error_handling() { Http::fake([ 'payment.api/charge' => Http::response([ 'error' => 'Insufficient funds' ], 422), ]); $response = $this->postJson('/api/pay', [ 'amount' => 1000, 'card_token' => 'tok_test_123', ]); $response->assertStatus(422) ->assertJson([ 'error' => 'Payment failed' ]); Http::assertSent(function ($request) { return $request->hasHeader('Authorization'); }); } } ?>

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

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