Как проверить самовывоз функции ax ios внутри setTimeout с помощью jest - PullRequest
0 голосов
/ 03 апреля 2020

Мне трудно справиться с ситуацией, когда вам нужно протестировать запросы 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 и фальшивые таймеры

но все даром

...