Heim > Backend-Entwicklung > PHP-Tutorial > Fangen Sie unbeabsichtigte HTTP -Anfragen in Laravel -Tests an

Fangen Sie unbeabsichtigte HTTP -Anfragen in Laravel -Tests an

百草
Freigeben: 2025-03-05 15:20:09
Original
813 Leute haben es durchsucht

Catch Unintended HTTP Requests in Laravel Tests

Die

Laravels preventStrayRequests -Methode bietet einen Schutzmechanismus für Ihre Testsuite, der Ausnahmen fängt und auslöst, wenn eine externe HTTP -Anforderung nicht ordnungsgemäß verspottet wird. Dies trägt dazu bei, dass Ihre Tests isoliert und vorhersehbar bleiben und sich nicht auf externe Dienste verlassen.

Dieser Ansatz ist besonders nützlich in CI/CD-Umgebungen oder bei der Verwendung von APIs von Drittanbietern, da unerwartete Netzwerkaufrufe Tests verlangsamen oder zeitweise Fehler verursachen können.

use Illuminate\Support\Facades\Http;

// 启用对未模拟请求的保护
Http::preventStrayRequests();

// 设置模拟响应
Http::fake([
    'example.com/*' => Http::response(['data' => 'example'], 200)
]);
Nach dem Login kopieren

Folgendes ist ein Beispiel für die Implementierung eines umfassenden API -Testschutzes:

<?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']);
    }
}
Nach dem Login kopieren

Jede unerwartete HTTP -Anforderung, die nicht ordnungsgemäß verspottet wird, löst eine Ausnahme aus, mit der Sie eine zuverlässige Testsuite beibehalten können, die Ihren Anwendungscode wirklich von externen Abhängigkeiten isoliert.

Das obige ist der detaillierte Inhalt vonFangen Sie unbeabsichtigte HTTP -Anfragen in Laravel -Tests an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage