С React и Jest, как мне издеваться над Обещанием, которое мне нужно ждать? - PullRequest
0 голосов
/ 16 апреля 2020

Я использую React 16.13.0 и пытаюсь использовать jest для проверки, был ли вызван метод. Я очень смущен тем, как использовать издевательства. У меня есть этот метод ...

class Missions {
    ...
  async removeVolunteerFromMission(missionId: string) {
    const missions = this.repo();
    const mission = await missions.findById(missionId);
    mission.volunteerId = '';
    mission.status = MissionStatus.unassigned;
    return this.repo().update(mission);
  }
...
export default new Missions();

Как мне проверить, был ли вызван мой метод "findById"? У меня есть этот метод теста ...

it('unassigns volunteer', async() => {

  const missionId = "1234";
  const mission = new Mission();
  mission.missionId = missionId;

  const mockFindById = jest.fn().mockResolvedValue(mission);
  const mockUpdate = jest.fn().mockResolvedValue(mission);
  const baseRepo = {
    findById: () => mockFindById,
    update: () => mockUpdate
  };
  jest.spyOn(missions, 'repo').mockReturnValue(baseRepo);

  await missions.removeVolunteerFromMission(missionId);

  console.log("mission === " + mission);

  expect(mockFindById).toHaveBeenCalledTimes(1);
});

, но он не работает с

expect(jest.fn()).toHaveBeenCalledTimes(expected)

Expected number of calls: 1
Received number of calls: 0

  29 |       console.log("mission === " + mission);
  30 | 
> 31 |       expect(mockFindById).toHaveBeenCalledTimes(1)
     |                            ^

Как мне понять, что это на самом деле называется?

1 Ответ

0 голосов
/ 16 апреля 2020

Здесь шпионы / издевательства на самом деле не вызываются, анонимная функция -

const baseRepo = {
  findById: () => mockFindById,
  update: () => mockUpdate
};

, но простая установка функции ложного срабатывания будет работать

const baseRepo = {
  findById: mockFindById,
  update: mockUpdate
};
...