我有一段代码在失败之前重试某次API调用3次。我也有这个API的存根。
我想在失败的情况下写两个测试:
这是第一次测试:
it 'fails' do
expect { risky_call } to raise_error SomeError
end
然而,第二个测试有点棘手:
it 'calls the API three times' do
risky_call
expect(stub).to have_been_requested.times(3)
end
问题是risky_call
引发SomeError
,导致测试失败。我想做这样的事情:
it 'calls the API three times' do
risky_call rescue nil
expect(stub).to have_been_requested.times(3)
end
但它确实看起来非常hackish。
是否有更好/更安全/更惯用的方式来编写此规范?
答案 0 :(得分:1)
不确定您的存根看起来像什么,但这似乎是每个测试规则的单个期望不需要应用的时间之一。
您的规范非常明确,它应该在引发错误之前尝试3次,以便进行类似
的测试it 'calls the API three times before raising an error' do
expect { risky_call }.to raise_error(SomeError)
expect(stub).to have_been_requested.times(3)
end
对我来说具有逻辑意义。期望它在没有上下文的情况下“呼叫3次”不会。如果它只调用1次或2次怎么办?这会使您的测试描述产生误导。新的描述解释了它会在引发错误之前重试3次,这是你的实际意义并且易于理解。