在两个(或更多)结果中的任何一个都是可接受的情况下,编写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(option 1,option 2)",但这似乎有点过分-我希望有一个更好的解决方案。
6条答案
按热度按时间tsm1rwdh1#
ActiveSupport提供了
Object#in?
方法,你可以将它与RSpec结合起来,简单的使用如下:或者使用新的Rspec 3语法:
ldxq2e6h2#
我知道这是旧的,但是在我在RSpec 3.4中遇到了这个,现在有一个
or
方法。所以这是有效的:svdrlsy43#
我可能会这样写:
vmjh9lq94#
另一种写法是把期望放在应该的右边:
ycl3bljg5#
如果使用
be
匹配器应用or
mgdq6dx16#
你可以通过
flipping
的比较来解决这个问题:expect(['head','tails']).to include(flip_coin)