メインコンテンツまでスキップ

否定マッチャーを定義する

RSpec::Matchers.define_negated_matcher を使用して、既存のマッチャーの否定バージョンを定義することができます。これは特に、組み合わせたマッチャー式で役立ちます。

組み合わせた否定マッチャー式

次の内容で "composed_negated_expression_spec.rb" という名前のファイルがあるとします:

RSpec::Matchers.define_negated_matcher :an_array_excluding, :include

RSpec.describe "A negated matcher" do
let(:list) { 1.upto(10).to_a }

it "can be used in a composed matcher expression" do
expect { list.delete(5) }.to change { list }.to(an_array_excluding 5)
end

it "provides a good failure message based on the name" do
# deliberate failure
expect { list.delete(1) }.to change { list }.to(an_array_excluding 5)
end
end

rspec composed_negated_expression_spec.rb を実行すると、

次のすべてが出力に含まれるべきです:

| 2 つの例、1 つの失敗 | | 1) 否定マッチャーは名前に基づいた良い失敗メッセージを提供する | | Failure/Error: expect { list.delete(1) }.to change { list }.to(an_array_excluding 5) | | list が 5 を除いた配列に変更されることを期待しましたが、現在は [2, 3, 4, 5, 6, 7, 8, 9, 10] です |