LoginSignup
1
0

【Laravel】外部APIをスタブにして単体テストを実施する

Posted at

外部APIに依存している機能を単体テストする場合、外部APIをスタブにしてダミーレスポンスを設定してテストをすることが一般的です。

今回、Laravelの単体テストにおいて外部APIに依存している部分があったのでLaravelの単体テストにおける外部APIのスタブ化について纏めました。

結論

  • Http::fakeを使う事で外部APIとの通信をスタブに置き換えることができる
  • 呼び出し順によって応答内容を変える場合はHttp::sequence()を使う
  • Http::fakeは上書きができない

基本形

Http::fake([
    '/signin' => Http::response([
        'status' => 'Success'
    ], 200),
    '*' => Http::response([
        'status' => 'OK'
    ], 200),
]);

Http::fakeにAPIのURLごとに応答内容をHttp::responseを使って設定すればよい。
ワイルドカードも使用可能。

同じAPIを複数回呼び出す時にそれぞれで応答を変えたい場合

Http::fake([
    '/signin' => Http::sequence()
        ->push(['status' => 'Success'], 200)
        ->push(['status' => 'Fail'], 400),
    ]);

Http::sequenceを使うことで呼び出しの順番に応じた応答を返すようにできる。

同じテストの中でfakeの設定を上書きすることはできない

Http::fake([
    '/signin' => Http::response([
        'status' => 'Success'
    ], 200)
]);

Http::fake([
    '/signin' => Http::response([
        'status' => 'OK'
    ], 200)
]);

同じAPIに対してfakeを2回呼び出しても最初に設定したレスポンス(Success)しか返ってこなかったので、上書きはできないようだ。
そのため、基本的なレスポンスはsetUpで設定しておいて、必要に応じて各テストメソッドで応答内容を上書きする、といったことはできなかった。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0