我有一段代码,在失败之前重试某个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但这看起来确实很无趣。
有没有一种更好/更安全/更地道的方式来编写这个规范?
发布于 2018-06-14 14:25:01
不确定存根是什么样子,但这似乎是不需要适用每个测试规则的单一期望的情况之一。
您的规范非常清楚,它应该在引发错误之前尝试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次,这就是您实际的意思,并且很容易理解。
https://stackoverflow.com/questions/50854865
复制相似问题