La méthode preventStrayRequests
de Laravel fournit un mécanisme de protection pour votre suite de test qui capture et lève des exceptions lorsqu'une demande HTTP externe n'est pas correctement moquée. Cela permet de garantir que vos tests restent isolés, prévisibles et ne comptent pas sur des services externes.
Cette approche est particulièrement utile dans les environnements CI / CD ou lors de l'utilisation d'API tierces, car les appels de réseau inattendus peuvent ralentir les tests ou provoquer des défaillances intermittentes.
use Illuminate\Support\Facades\Http; // 启用对未模拟请求的保护 Http::preventStrayRequests(); // 设置模拟响应 Http::fake([ 'example.com/*' => Http::response(['data' => 'example'], 200) ]);
Ce qui suit est un exemple de la façon de mettre en œuvre une protection complète des tests d'API:
<?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']); } }
Toute demande HTTP inattendue qui n'est pas correctement moquée déclenchera une exception, ce qui vous aide à maintenir une suite de test fiable qui isole vraiment votre code d'application à partir de dépendances externes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!