1

昨天我和我的一个朋友讨论这个问题,我们没有得出结论。在测试时,在我们使用 RSpec 的情况下,布尔方法,我想知道使用的意义是什么:

it 'should process the payment' do
    payment.processed?.should eq(true)
end

该步骤必须检查付款是否已处理,所以我只是去了:

it 'should process the payment' do
    payment.processed?
end

现在,我可能错了,但是,步骤在某种程度上就像你希望它们返回 true 的布尔方法,所以我想知道检查“true 为 true”有什么意义,我的意思是你已经在那里得到了 true,对吗?

所以你怎么看?

4

3 回答 3

3

指定布尔方法(任意谓词)的惯用方式是:

it 'should process the payment' do
  payment.should be_processed
end

请注意,您的第二个片段不会调用 rspec 期望,因此它不会测试任何东西(除了代码已成功执行)。我认为您假设一个it块检查其返回值,但事实并非如此。

于 2012-10-09T08:00:10.287 回答
2
 it "should process the payment" do
  payment.should be_processed
end

当你有一个匹配器时be_xxx(除非有更具体的设置)rspec 将检查它subject.xxx?是否真实。

如果您的规范中没有调用 should 那么您没有测试任何内容:如果已处理?返回 false 规范将通过

于 2012-10-09T08:07:57.280 回答
2

步骤不是期望返回 true 的布尔方法。所有动作都发生在should方法内——它执行测试并确定成功或失败。

这就是为什么你可以should在一个块中有多个 s 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

我还建议重写以使用be_processedtokland 建议的方法。

于 2012-10-09T08:10:20.127 回答