【发布时间】:2021-05-01 05:47:49
【问题描述】:
我正在使用 TypeORM。
使用真实数据库连接在本地运行良好。
但是当我用 Jest 运行测试时,测试失败了。
我模拟了我需要的 TypeORM 方法,并期望调用所有这些方法。
测试在expect(typeorm.getRepository(Covid).save).toHaveBeenCalled();上失败
它没有被调用。
我不明白为什么这个测试代码没有调用。
有人知道解决办法吗?
这里是代码。
describe('getCoronaData', () => {
it('should get a Covid Status data and return it', async () => {
typeorm.getRepository = jest.fn().mockReturnValue({
findOne: jest.fn().mockResolvedValue(null),
create: jest.fn(),
save: jest.fn(),
});
await getCoronaData();
expect(typeorm.getRepository).toHaveBeenCalledWith(Covid);
expect(typeorm.getRepository(Covid).findOne).toHaveBeenCalled();
expect(typeorm.getRepository(Covid).save).toHaveBeenCalled(); // this expect result is making an error
// Expected number of calls: >= 1
// Received number of calls: 0
});
});
export const getCoronaData = async () => {
try {
// Just a fake data
const covidStatus = [
{
city: 'city',
totalCases: '100',
increasedCases: '100',
date: 'time',
},
];
const covidRepository = getRepository(Covid);
covidStatus.forEach(async (status) => {
const exist = await covidRepository.findOne({
where: { city: status.city },
});
if (!exist) {
// expecting save() method at this part to be called, but it fails
return await covidRepository.save(
covidRepository.create({
city: status.city,
totalCases: status.totalCases,
increasedCases: status.increasedCases,
date: status.time,
})
);
} else {
return await covidRepository.save([
{
id: exist.id,
totalCases: status.totalCases,
increasedCases: status.increasedCases,
date: status.time,
},
]);
}
});
} catch (err) {
console.error(err);
return;
}
};
【问题讨论】: