matcherとは
RSpecでテストをする時、こういう風に動いて欲しいと期待をしてその通りに動いたかを
確認するためのものです。
例えば
expect(100 + 300).to eq 400
とあったとします。
これは100 + 300は400と期待(expect)をし、この答えがきたしていたものと等しい(eq)かを
確認しています。
このeqがmatcherです。
下ではmatcherの種類を一部紹介します。
to be_blankとto be_present
最初にto be_blankから説明します。
これは~は存在しないというmatcherです。
例えば
expect(article[:title]).to be_blank
これはarticleにはtitleは存在しないと期待したテストになります。
次にto be_presentについてです。
expect(article[:user_id]).to be_present
これはarticleにはuser_idは存在すると期待したテストになります。
⚫︎補足 beの意味
beは等号や不等号など大小を調べるときに使うみたいです。
等号・不等号なしでも上のようもにかけます。
詳しくは下の資料からも参考にしてみてください。
to be_truthyとto be_falsey
to be_truthyから説明します。
これは戻り値をtrueで返すmatcherです。
# 入力しなければならないものがあるので保存できる(結果はtrue)
staff.name = 'Tom'
user.job = 'programmer'
expect(staff.save).to be_truthy
staffは保存できると期待してtrue(保存できる)とテストをしています。
最後にto be_falseyを説明します。
# 何も入力されていないので保存できない(結果はfalse)
expect(staff.save).to be_falsey
staffは保存できないと期待して保存できない(結果はfalse)ことをテストしています。
⚫︎補足 to be_trueと to be_false
上の2つはtrue もしくは false でなければいけないものです。
to be_truthyとto be_falseyはtrueっぽい、falseっぽいでもテストをできるみたいです。
matcherについてもっと詳しく知りたい方は下の参考資料から確認してください。
⚫︎参考資料
https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5
https://qiita.com/idaida_idaida/items/eda4a29e5ece5122611b