Rumah >pembangunan bahagian belakang >tutorial php >Tangkap permintaan HTTP yang tidak diingini dalam ujian Laravel

Tangkap permintaan HTTP yang tidak diingini dalam ujian Laravel

百草
百草asal
2025-03-05 15:20:09815semak imbas

Catch Unintended HTTP Requests in Laravel Tests

Kaedah

Laravel menyediakan mekanisme perlindungan untuk suite ujian anda yang menangkap dan melemparkan pengecualian apabila permintaan HTTP luaran tidak diabaikan dengan betul. Ini membantu memastikan ujian anda tetap terpencil, boleh diramal, dan tidak bergantung pada perkhidmatan luaran. preventStrayRequests

Pendekatan ini amat berguna dalam persekitaran CI/CD atau apabila menggunakan API pihak ketiga, kerana panggilan rangkaian yang tidak dijangka mungkin melambatkan ujian atau menyebabkan kegagalan sekejap.

use Illuminate\Support\Facades\Http;

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

// 设置模拟响应
Http::fake([
    'example.com/*' => Http::response(['data' => 'example'], 200)
]);
Berikut adalah contoh bagaimana melaksanakan perlindungan ujian API yang komprehensif:

<?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']);
    }
}
Mana -mana permintaan HTTP yang tidak dijangka yang tidak diabaikan dengan betul akan mencetuskan pengecualian, yang membantu anda mengekalkan suite ujian yang boleh dipercayai yang benar -benar mengasingkan kod aplikasi anda dari kebergantungan luaran.

Atas ialah kandungan terperinci Tangkap permintaan HTTP yang tidak diingini dalam ujian Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn