如何测试连接失败时http宏重试次数?
应用服务提供商:
Http::macro('host', function () {
return Http::acceptJson()
->retry(5, 600, function (\Exception $exception, PendingRequest $request) {
return $exception instanceof ConnectionException;
});
});
功能测试:
public function test_connection_exception(): void
{
Http::preventStrayRequests();
Http::fake([
'*' => // I need something here...
]);
Http::assertSentCount(5);
}
在测试中,您可以使用
Http::fake
来模拟所有请求的连接异常。您可以通过从抛出 Http::fake
的 ConnectionException
方法返回一个闭包来完成此操作。以下是修改测试的方法:
public function test_connection_exception(): void
{
Http::fake(function () {
throw new \Illuminate\Http\Client\ConnectionException('Connection exception');
});
try {
Http::host()->get('http://example.com');
} catch (\Exception $e) {
// Handle the exception
}
Http::assertSentCount(5);
}
在此代码中,
Http::fake(function () { throw new \Illuminate\Http\Client\ConnectionException('Connection exception'); });
模拟所有HTTP请求的连接异常。然后,Http::host()->get('http://example.com');
发送 GET 请求,该请求将因连接异常而失败。最后,Http::assertSentCount(5);
断言请求已发送 5 次,这是您在 host
宏中指定的重试次数。