Мне трудно справиться с ситуацией, когда вам нужно протестировать запросы ios в setTimeout. Цель состоит в том, чтобы добиться четырехкратных вызовов ios, но в результате получается всего 1:
отрывок из консоли:
expect(jest.fn()).toHaveBeenCalledTimes(4)
Expected mock function to have been called four times, but it was called one time.
Вот код:
in session.js
:
import axios from 'axios';
export const HeartBeat = {
beat: function() {
setTimeout(() => this.callAjax(), 1000);
},
callAjax: function() {
const self = this;
axios({ method: 'PATCH', data: { state: 'keep_alive' } }).then(() => self.beat());
},
};
in session.spec.js
:
import axios from 'axios';
import Session, {HeartBeat} from 'bundles/components/Header/session';
jest.mock('axios');
jest.useFakeTimers();
it("should call heartbeat multiple times", done => {
axios.mockImplementationOnce(() => Promise.resolve());
HeartBeat.beat();
jest.runTimersToTime(3001);
expect(axios).toHaveBeenCalledTimes(4);
done();
});
Я перепробовал почти все, включая async / await, а также этот код: Тестирование функции рекурсивного опроса с помощью jest и фальшивые таймеры
но все даром