如何使用 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) .

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...