Ruby on rails Rspec:使用或在expect.to eq语句中
我有一个rspec测试,我想确保只有两个值可以传递到我的实例变量中。我注意到,Ruby on rails Rspec:使用或在expect.to eq语句中,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我有一个rspec测试,我想确保只有两个值可以传递到我的实例变量中。我注意到,应该用一个块来满足,这似乎是测试两个结果都可以接受的更为普遍的方法,但我想实现一个expect()。到eq(),如下所示: it "only allows -2 or 2 as values" do expect (@note.value).to eq(2 or -2) end 对于我想要的rspec测试,这个语法正确吗?我理解should语句背后的想法,我更关心的是为什么should比使用expect.
应该用一个块来满足
,这似乎是测试两个结果都可以接受的更为普遍的方法,但我想实现一个expect()。到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
更可取(如果事实确实如此)
谢谢。如中所述,您可以采用另一种方法,并在expect
子句中获得可能的值。有了这个,看起来是这样的:
expect([2, -2]).to include(@note.value)
我还应该提到的是,你通常希望在测试中避免这种随机性。对你的期望要精确 您可以同时使用
或两个匹配器:
expect(@note.value).to eq(2).or eq(-2)
有关详细信息。谢谢。我理解should
语句。我想知道为什么带有复合期望的expect.to eq
语句可能不适合should
语句,但事实并非如此。RSpec的expect
语法现在是首选语法。谢谢,你能解释一下你在我的测试中看到的随机性吗?我只希望两个值传递true,其他所有值都返回false。您应该测试在何种情况下返回每个特定值-知道方法可以返回-2或2是无用的,如果它为某些输入返回2而不是-2,反之亦然。这就是随机性;)通常,您会测试一个特定的注释,您可以确定值为2,或者确定值为-2。类似于expect(@first_note.value)的东西;期望(@second_note.value).为(-2)