Laravel 12.1の新機能:HTTPリクエストの記録をフェイクなしで可能にする Http::record() の導入

Laravel v12.1.0 では、HTTPクライアントに関するテストの柔軟性を向上させる新機能が追加されました。Pull Request #54850 により、HTTPリクエストをフェイクせずに記録できる Http::record()
メソッドが導入されています。
従来の課題
LaravelのHTTPクライアントでは、Http::fake()
を使用して外部リクエストをモックし、テスト環境での予期しない外部通信を防ぐことが一般的でした。しかし、実際のリクエストを送信しながら、その内容を記録・検証したいケースも存在します。従来の方法では、リクエストの記録とフェイクが密接に結びついており、実際のリクエストを行いながらの記録が困難でした。
Http::record() の新機能
今回の変更により、Http::record()
メソッドを使用することで、実際のHTTPリクエストを送信しながら、その内容を記録することが可能になりました。これにより、以下のようなコードでリクエストの記録と検証が行えます:
use Illuminate\Support\Facades\Http;
Http::record();
$response = Http::get('https://example.com/api/data');
// 記録されたリクエストの取得
$recordedRequests = Http::recorded();
// 最後のリクエストを検証
$firstRequest = end($recordedRequests);
$this->assertEquals('https://example.com/api/data', $firstRequest->url());
この機能は、リクエストの内容やレスポンスを実際の通信を通じて検証したい場合に非常に有用です。例えば、APIの統合テストや、外部サービスとの連携部分の検証などで活用できます。
まとめ
Laravel v12.1.0で追加された Http::record()
メソッドは、HTTPクライアントのテストにおける柔軟性を大きく向上させる機能です。実際のリクエストを送信しながら、その内容を記録・検証できるため、より現実的なテストシナリオの構築が可能になります。詳細については、公式のPull Request #54850 をご参照ください。