有了React和Jest,我该如何嘲笑我需要等待的承诺



我正在使用React 16.13.0,并试图使用jest来测试是否调用了方法。我对如何使用mock很困惑。我有这个方法。。。

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)
|                            ^

我怎么知道这是怎么叫的?

这里实际上并没有调用间谍/模拟,匿名函数是

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

但是简单地设置mock函数将工作

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

最新更新