Javascript 如何使用Sinon&;测试延迟后重试的函数;柴?

Javascript 如何使用Sinon&;测试延迟后重试的函数;柴?,javascript,mocha.js,chai,sinon,proxyquire,Javascript,Mocha.js,Chai,Sinon,Proxyquire,我有一个函数,如果失败,它会延迟再次调用自己 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)

我有一个函数,如果失败,它会延迟再次调用自己

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)
程序在第一个等待setTimeoutAsync时卡住(重试间隔)