Как протестировать функцию, которая повторяется после задержки, с помощью Sinon

#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)
    }
}
 

Заглушка тестовой функции выглядит следующим образом:

 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 ) .