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

複合的な期待値

マッチャーは、複合的な期待値を作成するために andor を使用して組み合わせることができます。

and を使用して期待値を連結する

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

RSpec.describe "A compound `and` matcher" do
let(:string) { "foo bar bazz" }

it "passes when both are true" do
expect(string).to start_with("foo").and end_with("bazz")
end

it "passes when using boolean AND `&` alias" do
expect(string).to start_with("foo") & end_with("bazz")
end

it "fails when the first matcher fails" do
expect(string).to start_with("bar").and end_with("bazz")
end

it "fails when the second matcher fails" do
expect(string).to start_with("foo").and end_with("bar")
end
end

rspec compound_and_matcher_spec.rb を実行すると、

出力に "4 examples, 2 failures" が含まれていることを期待します。

or を使用して期待値を連結する

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

class StopLight
def color
%w[ green yellow red ].shuffle.first
end
end

RSpec.describe StopLight, "#color" do
let(:light) { StopLight.new }
it "is green, yellow or red" do
expect(light.color).to eq("green").or eq("yellow").or eq("red")
end

it "passes when using boolean OR `|` alias" do
expect(light.color).to eq("green") | eq("yellow") | eq("red")
end
end

rspec stoplight_spec.rb を実行すると、

例がパスすることを期待します。