Tech Hotoke Blog

IT観音とは私のことです。

#RSpec Mock: 引数に応じて返り値を変える方法 #Ruby

これは何?

RSpecを書くときの小技メモ。

前提

Tips

  • RSpecで特定のメソッドをMockする
  • Mockするメソッドはテストの中で流用されている
  • 引数などの条件によって返り値を変えたい
  • どうする?

  • A:

    • receiveメソッドにはブロックが渡せるので、ブロックの中で条件分岐させる
  before do
                allow(hoge).to receive(:hogehoge) do |h|
                  if h.dig(:criteria, :ids)
                    # idsが含まれる場合、空の配列を返す        
                    [{ id: 'PUsR1qvef3', start_date: Date.today }]
                  elsif h.dig(:criteria, :codes) 
                    # codesが含まれる場合、空の配列を返す
                    []
                  end
                end
              end

備考

  • 引数に差はないけど返り値を制御したい場合などはどうしよう