我想检查我的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
这可能吗?
答案 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