Laravel Tutorials

Catch Unintended HTTP Requests in Laravel Tests

Published
Catch Unintended HTTP Requests in Laravel Tests image

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 requests
Http::preventStrayRequests();
 
// Set up your fakes
Http::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.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article