Rspec:应该是(这个或那个)

时间:2011-10-27 21:00:37

标签: ruby rspec

在两种(或多种)结果中的任何一种都可以接受的情况下编写rspec的最佳方法是什么?

这是我想要做的一个例子。这显然是错误的(我认为),但它应该给你我想要实现的目标:

it "should be heads or tails" do
  h="heads"
  t="tails"
  flip_coin.should be(h || t)
end

是的,我知道我可以编写自己的rspec匹配器“should_be_one_or_the_other(option1,option2)”,但这似乎有点多了 - 我希望有更好的解决方案。

6 个答案:

答案 0 :(得分:30)

ActiveSupport提供Object#in?方法。您可以将它与RSpec结合使用,只需使用以下内容:

flip_coin.should be_in(["heads", "tails"])

或使用新的Rspec 3语法:

expect(flip_coin).to be_in(["heads", "tails"])

答案 1 :(得分:21)

我知道这已经过时了但是我在RSpec 3.4上碰到了这个,现在有一个or keyword。所以这是有效的:

expect(flip_coin).to eq('heads').or(eq('tails'))

答案 2 :(得分:14)

我可能会写这样的东西:

it "should be heads or tails" do
  ["heads", "tails"].should include flip_coin
end

答案 3 :(得分:11)

另一种写作方式是期望权利应该是:

it 'should be heads or tails' do
  flip_coin.should satisfy{|s| ['heads', 'tails'].include?(s)}
end

答案 4 :(得分:2)

如果orbe匹配器

一起使用
expect(flip_coin).to eq('heads').or(be == 'tails')

答案 5 :(得分:0)

您可以通过sranade@abc.com比较来解决此问题:

flipping