Как лучше всего написать rspec в ситуации, когда допустимо любое из двух (или более) исходов?
Вот пример того, что я хочу сделать. Это явно неправильно (я думаю), но это должно дать вам суть того, чего я пытаюсь достичь:
it "should be heads or tails" do
h="heads"
t="tails"
flip_coin.should be(h || t)
end
И да, я знаю, что могу написать свой собственный rspec matcher "should_be_one_or_the_other(option1,option2)", но это кажется слишком сложным - я надеялся на лучшее решение.
ActiveSupport предоставляет метод Object#in?
. Вы можете объединить его с RSpec и просто использовать следующее:
flip_coin.should be_in(["heads", "tails"])
Или с помощью нового синтаксиса Rspec 3:
expect(flip_coin).to be_in(["heads", "tails"])
Другой способ написания - с ожиданием справа от should:
it 'should be heads or tails' do
flip_coin.should satisfy{|s| ['heads', 'tails'].include?(s)}
end