首页 > 解决方案 > 如何使用 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)。

标签: javascriptmocha.jschaisinonproxyquire

解决方案


推荐阅读