Closed5

RSpec メモ

daijiro maeyamadaijiro maeyama

allow(モックオブジェクト).to receive(メソッド名) の形で、モックに呼び出し可能なメソッドを設定できる。

セットアップしたメソッドがちゃんと呼び出されたかどうかを検証するには、allow の箇所を expect にする。

expect(モックオブジェクト).to receive(メソッド名)

メソッドの引数の中身を検証するには with を使う。

expect(モックオブジェクト).to receive(メソッド名).with(引数の中身)
daijiro maeyamadaijiro maeyama

モックを使う場合は必ずどこかでモックと実際の実装を置き換える必要がある。
以下のようにすることで、メソッドの返却する値やオブジェクトを置き換えることができる。

allow(実装を置き換えたいオブジェクト).to receive(置き換えたいメソッド名).and_return(返却したい値やオブジェクト)
daijiro maeyamadaijiro maeyama

スタブ(stub) はオブジェクトのメソッドをオーバーライドし、事前に決められた値を返します。つまりスタブは、呼び出されるとテスト用に本物の結果を返す、ダミーメソッド。

スタブをよく使うのはメソッドのデフォルト機能をオーバーライドするケース。特にデータベースやネットワークを使う処理が対象。

daijiro maeyamadaijiro maeyama

and_wrap_original

メソッドの呼び出しをラップして、メソッドの呼び出し前や呼び出し後に処理を割り込みたいときに使う。

allow(object).to receive(:method).and_wrap_original do |m, *args|
  # メソッドの呼び出し前に何かしたい場合はここに書く

  m.call(*args) # メソッドの呼び出し

  # メソッドの呼び出し後に何かしたい場合はここに書く
end
このスクラップは2022/11/26にクローズされました