#typescript #recursion #async-await #jestjs
Вопрос:
У меня есть следующая функция, которую я ожидаю запустить в цикле:
export const startApiCallRecursive = (fn: () =gt; Promiselt;voidgt;) =gt; { function timer() { setTimeout(async () =gt; { console.log("tick"); await fn() .then(() =gt; timer()) .catch((error) =gt; console.log(error)); }, 1000); } timer(); };
когда я передаю функцию, такую как:
const wait = (ms: number): Promiselt;voidgt; =gt; new Promise((resolve) =gt; setTimeout(resolve, ms));
такие как:
startApiCallRecursive(() =gt; wait(2000))
он работает так, как ожидалось, и регистрирует «галочку» каждые 3 секунды.
Как бы то ни было, когда я использую следующий тест:
it("calls an async function which resolves after intervall has finished", () =gt; { jest.useFakeTimers(); const functionToBeCalled = jest.fn().mockImplementation(() =gt; wait(100)); startApiCallRecursive(functionToBeCalled); jest.advanceTimersByTime(5500); expect(functionToBeCalled).toBeCalledTimes(5); });
это не удается …