RSpecのexpect() と expect{ } がややこしい
expect() と expect{ }の使い分けを理解する
最近RSpecのテストを書くようになったのですが、
expect()
と expect{ }
の違いがよく分かっておらず、「どっちかでテストを書いてみて、
テストが落ちたら、もう片方に修正する。」
なんて、非常に無駄な作業が発生していたので、調べてみました!
もうお分かりかと思いますが、RSpec初心者向けの記事です笑
結論
結論から言うと、expect()
と expect{ }
2つを使い分けるコツは
expectはmatcherに中身をそのまま渡すので、()
で書けるか、{}
でかけるかはmatcherがProcを評価できるか出来ないか次第
と言うことでした!
なので、この2つの理解が大事と言うことですね。 - matcher - Proc
どちらも、ご存知とは思いますが、一応簡単に説明入れると
matcher
matcherとは下でいう to
の部分のことです。
expect()
で呼んでいる変数とeqの後に続く期待する答えの橋渡し的な存在です。
to
以外では、not_to
be
raise_error
などがあります。
hoge = 3 expect(hoge).to eq 3
Proc
Procとはブロック(何らかの)をオブジェクト化するためのクラスです。 Procオブジェクトはcallメソッドによって実行されます。
ex
add_number = Proc.new { |num_1, num_2| puts num_1 + num_2 } add_number.call(1, 2) #=> 3
Procについては下記の記事がわかりやすいと思います Ruby Procについて学ぶ - Qiita
下記の記事を参考にしたので、理由は下記の記事を参照してください。 should を捨て expect を使うようになった、たった一つの理由 - MUGENUP技術ブログ