Laravel's preventStrayRequests method provides a safeguard for your test suite by catching and throwing exceptions when external HTTP requests aren't properly faked. This helps ensure your tests remain isolated, predictable, and don't depend on external services.
This approach is especially valuable in CI/CD environments or when working with third-party APIs where unexpected network calls could slow tests or cause intermittent failures.
use Illuminate\Support\Facades\Http; // Enable protection against unfaked requestsHttp::preventStrayRequests(); // Set up your fakesHttp::fake([ 'example.com/*' => Http::response(['data' => 'example'], 200)]);
Here's an example of implementing comprehensive API test protection:
<?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(); // Prevent any unfaked HTTP requests Http::preventStrayRequests(); // Configure fake responses 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] ] ]), // Catch any other request with an error '*' => 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']); }}
Any unexpected HTTP request that isn't properly faked will trigger an exception, helping you maintain a reliable test suite that truly isolates your application code from external dependencies.
