Метод preventStrayRequests у Laravel забезпечує захист вашого тестового середовища, ловлячи та викидаючи виключення у випадку, якщо зовнішні HTTP-запити не були належним чином змодельовані. Це гарантує, що ваші тести залишаються ізольованими, передбачуваними і не залежать від зовнішніх сервісів.
Такий підхід особливо корисний у CI/CD середовищах або під час роботи з сторонніми API, оскільки непередбачені мережеві виклики можуть уповільнювати тести або викликати випадкові збої.
use Illuminate\Support\Facades\Http;
// Увімкнути захист від незмодельованих запитів
Http::preventStrayRequests();
// Налаштуйте фейкові відповіді
Http::fake([
'example.com/*' => Http::response(['data' => 'example'], 200)
]);
Ось приклад реалізації всебічного захисту тестування API:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Services\WeatherService;
use Illuminate\Support\Facades\Http;
class WeatherServiceTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
// Запобігти будь-яким незмодельованим HTTP-запитам
Http::preventStrayRequests();
// Налаштування фейкових відповідей
Http::fake([
'api.weather.com/current*' => Http::response([
'temperature' => 72,
'conditions' => 'Sunny',
'humidity' => 45
]),
'api.weather.com/forecast*' => Http::response([
'daily' => [
['day' => 'Monday', 'high' => 75, 'low' => 60],
['day' => 'Tuesday', 'high' => 80, 'low' => 65]
]
]),
// Ловити будь-який інший запит з помилкою
'*' => Http::response('Unexpected request', 500)
]);
}
public function test_gets_current_weather()
{
$service = new WeatherService();
$weather = $service->getCurrentWeather('New York');
$this->assertEquals(72, $weather['temperature']);
$this->assertEquals('Sunny', $weather['conditions']);
}
public function test_gets_weather_forecast()
{
$service = new WeatherService();
$forecast = $service->getForecast('Chicago');
$this->assertCount(2, $forecast['daily']);
$this->assertEquals('Monday', $forecast['daily'][0]['day']);
}
}
Будь-який непередбачений HTTP-запит, який не був належним чином змодельований, викличе виключення, що допоможе підтримувати надійний тестовий пакет, який дійсно ізолює ваш код від зовнішніх залежностей