ホームページ  >  に質問  >  本文

Laravel の機能テストで GuzzleHttp クライアントを使用してサードパーティ API へのリクエストをシミュレートするにはどうすればよいですか?

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粉842215006P粉842215006315日前584

全員に返信(1)返信します

  • P粉617597173

    P粉6175971732023-11-10 09:09:10

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

    リーリー

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

    返事
    0
  • キャンセル返事