我正在尝试使用jest在我的nestjs应用程序中模拟对Date.now的调用。
我有一个存储库方法,可以软删除资源。
我有一个存储库方法,可以软删除资源。
async destroy(uuid: string): Promise<boolean> {
await this.userRepository.update({ userUUID: uuid }, { deletedDate: Date.now() });
return true;
}
为了进行软删除,我们只需添加一个时间戳,表示何时请求将其删除。
在这里和其他网站上进行了一些讨论后,我想出了这个测试。
describe('destroy', () => {
it('should delete a user schemas in the user data store', async () => {
const getNow = () => Date.now();
jest
.spyOn(global.Date, 'now')
.mockImplementationOnce(() =>
Date.now().valueOf()
);
const targetResource = 'some-uuid';
const result = await service.destroy(targetResource);
expect(result).toBeTruthy();
expect(userRepositoryMock.update).toHaveBeenCalledWith({ userUUID: targetResource }, { deletedDate: getNow() });
});
});
我曾认为.spyOn(global.Date)会模拟整个全局dat函数,但我的代码库中的Date.now()仍返回实际日期而不是模拟日期。
我的问题是,是否有一种方法可以从测试中提供在存储库中调用的Date.now的模拟返回值,还是我应该DI注入一个DateProvider到存储库类中,然后可以从我的测试中模拟它?