Ruby on RailsのテストをRSpecで書いているみなさん、どうも櫻井広大です。
be_falsy
使っていますでしょうか。
タイトルにもある、
be_falsy
be_falsey
be false
の違いについて書きます!
- RSpecでfalseやtrueの返り値のマッチャ be_falsy ということで、結論から書きますと、
be_falsy
と be_falsey
は同じです。
be_falsy
と be false
は違います。
僕は完全にすべて同じものだと思っていました。
- be_falsyとbe_falsey
これはエイリアスによって同様のふるまいをするようになっています。
完全に好みで使うことができます。
- be_falsyと be falseの違い これらは明確に違います。
実際によくあるテストコードはこんな感じですよね
it { is_expected.to be false }
で、これは明確に意味が違います。
be_falsy
は、false
とnil
の場合にマッチするのです。
rubyでいうところの、falsyな振る舞いをするもの、つまりfalseとnilなわけなのです。
if文などで評価される時にも、rubyはfalseとnilではif文の中のブロックは実行されません。
厳密にマッチさせるのであれば、be false
やeq false
でマッチャを書く必要があります。
個人的には、be false
のように記述する方が厳密なテストになるのでこちらの方がいいかなーと思います。
特に、 false || nil
などのようなふるまいのテストを書く場合に、意図せぬ挙動になる場合があります。
nilが返ってほしい場合とfalseが返ってほしい場合、その違いはあるのでしっかりと自分が意図した内容のテストになっているのかは見定めましょう。