rspec XOR应该包括

时间:2014-03-05 19:49:59

标签: ruby rspec xor

我想检查我的rspec测试(XOR)中是否存在两个可能的字符串中的一个。

实现这一点的效果:

it "worked" do
  ( 
    foo.bar.should include "A" AND foo.bar.should_not include "B" 
    ||
    foo.bar.should include "B" AND foo.bar.should_not include "A" 
  )
  # => if the above is false rspec should complain
end

这可能吗?

2 个答案:

答案 0 :(得分:2)

怎么样:

expect(foo.bar & ['A', 'B']).to have(1).item

此解决方案获取数组,使其与可能的值相交,并确保只剩下一个元素('A''B')。

@ steenslag的答案失败了,因为当rspec期望失败时,他们会停止测试,所以"两个人没有做出真正的" ...

如果您想使用旧的should语法,它将如下所示:

(foo.bar & ['A', 'B']).should have(1).item

答案 1 :(得分:0)

xor^

foo.bar.should(include "A") ^ foo.bar.should(include "B") 

当foo.bar包含“A”或“B”时,返回true,但不包括两者。

ar = ["AC","BC", "AB", "CC"]
ar.each{|str|p str.include?("A") ^ str.include?("B")}   
#true
#true
#false
#false