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

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Laravel Auditor Audits Your App With Your Own AI Agent image

Laravel Auditor Audits Your App With Your Own AI Agent

Read article
A simple form builder that stays out of your way image

A simple form builder that stays out of your way

Read article
Laravel AI: Trace Agent Runs With Lifecycle Events image

Laravel AI: Trace Agent Runs With Lifecycle Events

Read article
Laravel AI: Get Raw HTTP Responses and Rate Limits image

Laravel AI: Get Raw HTTP Responses and Rate Limits

Read article
Agent Run Observability in Laravel AI SDK 0.11 image

Agent Run Observability in Laravel AI SDK 0.11

Read article
Debounced Queued Event Listeners in Laravel image

Debounced Queued Event Listeners in Laravel

Read article