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 →
Mastering Laravel Testing: A Video Course on Laravel Tests image

Mastering Laravel Testing: A Video Course on Laravel Tests

Read article
NativePHP Mobile Security Advisories: Update to 4.6.1 image

NativePHP Mobile Security Advisories: Update to 4.6.1

Read article
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article
Decide with Jev: Turn AI Answers into Decisions with PHP Rules image

Decide with Jev: Turn AI Answers into Decisions with PHP Rules

Read article
Skuul: Open-Source School Management Built on Laravel image

Skuul: Open-Source School Management Built on Laravel

Read article
Laravel Read Replicas: Prevent Stale Reads After a Write image

Laravel Read Replicas: Prevent Stale Reads After a Write

Read article