Rspec:在期望.to eq语句中使用OR

时间:2015-08-15 05:57:51

标签: ruby-on-rails ruby rspec

我有一个rspec测试,我想确保只有两个值可以传递给我的实例变量。我注意到带有块的should satisfy似乎是更可接受的测试两种结果可接受的方式,但我想实现expect().to eq(),如下图所示:

it "only allows -2 or 2 as values" do
    expect (@note.value).to eq(2 or -2)
  end

这是我正确的rspec测试的正确语法吗?我理解should声明背后的想法,并且我更关注为什么should更适合使用expect .to eq(如果实际情况如此)复合期望。

谢谢。

2 个答案:

答案 0 :(得分:7)

你可以or两个匹配者:

ruby expect(@note.value).to eq(2).or eq(-2)

欲了解更多信息:

http://rspec.info/blog/2014/01/new-in-rspec-3-composable-matchers/#compound-matcher-expressions

答案 1 :(得分:2)

another question中所述,您可以反过来执行此操作,并在expect子句中包含可能的值。使用new matcher syntax,这将是这样的:

expect([2, -2]).to include(@note.value)

我还应该提一下,你通常希望在测试中避免这种随机性。准确地说明你的期望!