😇

RSpecのallowメソッドでハマったのでメモ

に公開

😇 はじめに

RSpec を使ったテストを書いている際に allow メソッドの挙動で少しハマってしまったことがあったので、その備忘録として残しておきます。

🤔 allow と expect

RSpec におけるスタブの方法として allowexpect があります。

allow は指定した対象が呼び出されなくてもエラーにならないのに対して、expect は指定した対象が呼び出されないとエラーになる、という違いがあります。

😇 with との組み合わせ

allowwith と一緒に使った場合、指定した引数パターン以外での呼び出しを許可しないようになるようです。

そのため、特定の引数パターンでの呼び出しをスタブしつつ、それ以外の引数での呼び出しは許可したい、といった場合には with を使ったスタブの前に以下の記述を追加する必要があります。

allow(Hoge).to receive(:enabled?).and_call_original

こうすることで、with で指定した引数パターン以外での呼び出しは元のメソッドを呼び出すようになります。

参考文献

Discussion