コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

FaradayのリクエストタイムアウトをWebMockで実現する

FaradayでAPI通信を行っているとき、APIタイムアウトを意図的に起こしたい時にどうするかというメモ

環境

rails (5.2.0)
faraday (0.12.2)
webmock (3.4.2)

考え方

Fardayはタイムアウトが発生すると Faraday::Error::TimeoutError を raiseしてくれるので、WebMockでそれをraiseするmockを作れば良い。

やり方

https://example.com/users の POSTのタイムアウトを実現したい場合

before do
  # 意図的にfaradayのTimeoutを発生させる
  stub_request(
    :post,
    "https://example.com/users",
  ).to_raise(Faraday::Error::TimeoutError)
end

こんな感じのMockを作ればリクエスト発生時にraiseを起こしてくれるので、タイムアウト時の処理チェックができる。

参考リンク