昨天我和我的一个朋友讨论过这个问题,我们没有得出结论。在我们使用RSpec测试布尔方法时,我想知道使用的重点是什么:
it 'should process the payment' do
payment.processed?.should eq(true)
end
该步骤必须检查付款是否已处理,所以我只是去了:
it 'should process the payment' do
payment.processed?
end
现在,我可能在这方面做错了,但是,步骤在某种程度上就像你希望它们返回true的布尔方法一样,所以我想知道检查“真实是真的”是什么意思,我的意思是你已经得到了真实的,对吗?
那么,您怎么看?
答案 0 :(得分:3)
规范布尔方法(arbitrary predicates)的惯用方法是:
it 'should process the payment' do
payment.should be_processed
end
请注意,您的第二个代码段不会调用rspec期望,因此它不会测试任何内容(其他代码已成功执行)。我认为您假设it
块检查其返回值,但事实并非如此。
答案 1 :(得分:2)
it "should process the payment" do
payment.should be_processed
end
如果你有一个be_xxx
形式的匹配器(除非有更具体的设置),rspec将检查subject.xxx?
是否真实。
如果您的规范中没有应该调用,那么您没有测试任何内容:如果已处理?返回false,规范将通过
答案 2 :(得分:2)
步骤不是期望返回true的布尔方法。所有操作都在should
方法中进行 - 它执行测试并确定成功或失败。
这就是为什么你可以在一个should
块中拥有多个it
的原因(尽管通常最好不要,如果可以避免的话)。
例如:
it "doesn't use return values" do
false.should be_true # the test fails immediately here
true.should be_true # this never gets called
end
我还建议重写以使用tokland建议的be_processed
方法。