javascript - 如何使用 Sinon & Chai 测试延迟后重试的功能?
问题描述
如果失败,我有一个函数会延迟再次调用自身。
async function getIp(retry=0) {
try {
return await http.get()
} catch (e) {
if (retry >= MAX_RETRIES) { throw e }
await setTimeoutAsync(RETRY_INTERVAL)
return await getIp(retry + 1)
}
}
测试函数存根如下:
let clock = sinon.useFakeTimers()
let tick = () => { clock.tick(501) }
const fakeClient = sinon.stub().onFirstCall().rejects().callsFake(tick)
.onSecondCall().rejects().callsFake(tick)
.onThirdCall().rejects().callsFake(tick)
.returns(testIp)
程序卡在第一个await setTimeoutAsync(RETRY_INTERVAL
)。
解决方案
推荐阅读
- c# - C#轻量级骨架解析文件
- javascript - 如何打破输入的javascript操作并开始新的操作
- push-notification - 在聊天应用程序中使用新消息更新用户
- java - android- Unable to send selected media to uri // java.io.File 不能应用于 android.net.Uri
- selection - Bokeh 1.0.4 - 使用交互式图例跨多个字形选择不包括所有字形
- javascript - Javascript 在 div 中放置元素
- excel - 将多个 csv 文件导入现有工作表
- dart - 为什么我的 setState 方法无法更改我的容器背景颜色?
- java - 如何在 Java 中删除 Array Generic 对象 Sack
- sql - 如何选择最多两列并按站分组