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)”,但这似乎有点多 – 我希望有更好的解决方案。
ActiveSupport提供Object#in?
方法。 您可以将它与RSpec结合使用,只需使用以下内容:
flip_coin.should be_in(["heads", "tails"])
或者使用新的Rspec 3语法:
expect(flip_coin).to be_in(["heads", "tails"])
我知道这已经过时了,但是我在RSpec 3.4上遇到了这个问题,现在有一个or
关键字 。 所以这是有效的:
expect(flip_coin).to eq('heads').or(eq('tails'))
我可能会写这样的东西:
it "should be heads or tails" do ["heads", "tails"].should include flip_coin end
编写它的另一种方式是对权利的期望:
it 'should be heads or tails' do flip_coin.should satisfy{|s| ['heads', 'tails'].include?(s)} end
如果应用or
与匹配
expect(flip_coin).to eq('heads').or(be == 'tails')
你可以通过flipping
比较来解决这个问题:
expect(['head','tails']).to include(flip_coin)