Очевидно, что устранение неполадок Jest ссылается на эту проблему: we have set the definition to happen asynchronously on the next tick of the event loop
. Я предполагаю, что это относится и к событиям внутри живого кода, а не только к написанным тестам.
Выполнение jest.runAllTimers()
поставит вещи в бесконечный цикл.
Добавление jest.runAllTicks()
повысит галочку, поэтому вышеприведенные тесты теперь работают.
Я все еще в замешательстве, но думаю, что это ответ.
jest.advanceTimersByTime(5000);
jest.runAllTicks();
expect(doAsyncStuff).toHaveBeenCalledTimes(1);
jest.advanceTimersByTime(5000);
jest.runAllTicks();
expect(doAsyncStuff).toHaveBeenCalledTimes(2);
https://jestjs.io/docs/en/troubleshooting#defining-tests
Также необходимо, чтобы это работало, чтобы имитировать реализацию doAsyncStuff, потому что любой асинхронный материал внутри doAsyncStuff, я думаю, попадает в очередь в тиковых событиях.
doAsyncStuff.mockImplementation(() => {
return new Promise.resolve();
});