0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RSpecでモックを使って外部サービスなどに接続する処理の呼び出しを確認する

Last updated at Posted at 2023-03-14

内部でAWSなどの外部サービスに接続してリクエストを送信する処理がある場合にその処理の呼び出し、および引数を確認したい時のコード例です。
外部サービスに接続するクライアント実装をモックする都合上 it 内部でモックの準備をする必要があるのがポイントになります。

# 外部サービスに接続する実装のイメージ
class HogeClient
  def send_message(arg)
    # 外部サービスに接続してリクエストする処理
  end
end
it 'HogeClientのsend_messageメソッドが呼び出され、引数に「fuga」が渡される' do
  client = spy(HogeClient)
  allow(HogeClient).to receive(:new).and_return(client)

  # 検査対象の実行

  # 外部サービスに接続する処理の呼び出しと引数の確認
  expect(client).to have_received(:send_message).with('fuga').once
end

なお、検査対象のメソッドが クラスメソッド なら spy でインスタンスを生成する必要もなく、呼び出されるメソッドを上書きするだけで済みます。

# 外部サービスに接続する実装のイメージ
class HogeClient
  def self.send_message(arg)
    # 外部サービスに接続してリクエストする処理
  end
end
before do
  allow(HogeClient).to receive(:send_message).and_return(true)
end

it 'HogeClientのsend_messageメソッドが呼び出され、引数に「fuga」が渡される' do
  # 検査対象の実行

  # 外部サービスに接続する処理の呼び出しと引数の確認
  expect(HogeClient.send_message).to have_received(:send_message).with('fuga').once
end
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?