Laravel の機能テストで GuzzleHttp クライアントを使用してサードパーティ API へのリクエストをシミュレートするにはどうすればよいですか?
P粉842215006
P粉842215006 2023-11-09 11:42:58
0
1
715

Laravel プロジェクト (PHP 8.0 上の Laravel 8) で、内部エンドポイントをテストする機能テストがあります。エンドポイントには、サービスのメソッドを呼び出すコントローラーがあります。次に、サービスはサードパーティのエンドポイントの呼び出しを試みます。私がシミュレートしたいのはこのサードパーティのエンドポイントです。現在の状況は次のとおりです:

内部エンドポイント機能テスト

リーリー

内部エンドポイント コントローラー

リーリー

内部サービス

リーリー

Guzzle のドキュメントを見ましたが、MockHandler 戦略ではテストで http リクエストを実行する必要があるようですが、これは私のテストで望んでいることではありません。 Guzzle の http クライアントをモックして、テストで指定できるカスタム http 応答を返したいと考えています。次のように Guzzle の http クライアントをエミュレートしようとします:

リーリー

しかし、InternalService はテストではこのモックにヒットしないようです。

Http Fake も考えて使ってみましたが、うまくいきませんでした。Guzzle の http クライアントは Laravel の http クライアントを拡張していないと思います。

この問題を解決し、サードパーティのエンドポイントを模擬する最善の方法は何ですか?

###編集###

この StackOverflow の質問に触発されて、私は模擬応答を含む Guzzle クライアントをサービスに挿入することで、この問題を正常に解決しました。上記の StackOverflow の質問との違いは、次の理由で

$this->app->bind

の代わりに $this->app->singleton を使用する必要があったことです。 DI 構成が異なります: AppServiceProvider.php

リーリー

P粉842215006
P粉842215006

全員に返信(1)
P粉617597173

依存関係の注入に応じて、モックされた応答を返すカスタム Guzzle http クライアントを使用して、InternalServicebind または singleton にしたいとします。たとえば、次のようになります。 :

リーリー

参照: PHPUnit を使用した Laravel コントローラー内の単体テスト

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート