コンテンツにスキップ

RSpecのマッチャについて

参考:https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5

マッチャ(matcher)とは

マッチャ(matcher)は「期待値と実際の値を比較して、一致した(もしくは一致しなかった)という結果を返すオブジェクト」のこと。

1
2
expect(1 + 2).to eq 3
expect([1, 2, 3]).to include 2

eqincludeがマッチャにあたります。 マッチャは自分自身に定義されている検証ルールに従って、実際の値(1 + 2 や [1, 2, 3])と期待値(3 や 2)を比較し、ルールに合致しているかどうかを判断します。

to / not_to / to_not

「~であること」を期待する場合はtoを使う。

1
expect(1 + 2).to eq 3

反対に「~ではないこと」を期待する場合はnot_toもしくはto_notを使う。 英語を使ってテストを作っているときに読みやすい方を使えば良いので、日本語を使ってテストを作っているときはnot_toなどに統一するとよい。

1
2
3
expect(1 + 2).not_to eq 1
# または
expect(1 + 2).to_not eq 1

tonot_to自体はマッチャではない。 tonot_toはマッチャの実行結果を受け取って、テストをパスさせるか否かを判断するRSpecのメソッド。

eq

期待値と実際の値が「等しい」かどうかを検証する場合はeqを使う。

1
expect(1 + 2).to eq 3

be

beは等号・不等号と組み合わせて、値の大小を検証するときによく使われるマッチャ。

1
expect(1 + 2).to be >= 3

be_xxx (predicateマッチャ)