首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在失败的代码中测试存根?

如何在失败的代码中测试存根?
EN

Stack Overflow用户
提问于 2018-06-14 10:04:36
回答 1查看 160关注 0票数 0

我有一段代码,在失败之前重试某个API调用3次。我还为这个API提供了一个存根。

我想在失败的情况下编写两个测试:

  • 整个事情都失败了;
  • API已经被调用了三次。

下面是第一个测试:

代码语言:javascript
复制
it 'fails' do
  expect { risky_call } to raise_error SomeError
end

然而,第二个测试则有点棘手:

代码语言:javascript
复制
it 'calls the API three times' do
  risky_call
  expect(stub).to have_been_requested.times(3)
end

问题是risky_call会引发SomeError,使测试失败。我想做这样的事:

代码语言:javascript
复制
it 'calls the API three times' do
  risky_call rescue nil
  expect(stub).to have_been_requested.times(3)
end

但这看起来确实很无趣。

有没有一种更好/更安全/更地道的方式来编写这个规范?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-14 14:25:01

不确定存根是什么样子,但这似乎是不需要适用每个测试规则的单一期望的情况之一。

您的规范非常清楚,它应该在引发错误之前尝试3次,所以测试如下

代码语言:javascript
复制
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次,这就是您实际的意思,并且很容易理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50854865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档