我正在使用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
};