Node.js 嘲弄日期。现在在nestJs中开玩笑
我正在尝试找出如何在我的nestjs应用程序中使用jest模拟对Date.now的调用 我有一个软删除资源的存储库方法Node.js 嘲弄日期。现在在nestJs中开玩笑,node.js,typescript,unit-testing,jestjs,nestjs,Node.js,Typescript,Unit Testing,Jestjs,Nestjs,我正在尝试找出如何在我的nestjs应用程序中使用jest模拟对Date.now的调用 我有一个软删除资源的存储库方法 async destroy(uuid: string): Promise<boolean> { await this.userRepository.update({ userUUID: uuid }, { deletedDate: Date.now() }); return true; } 我假设.spyOn(global.Date)模拟了整个全局dat函
async destroy(uuid: string): Promise<boolean> {
await this.userRepository.update({ userUUID: uuid }, { deletedDate: Date.now() });
return true;
}
我假设.spyOn(global.Date)模拟了整个全局dat函数,但是我的存储库中的Date.now()仍然返回实际日期,而不是模拟日期
我的问题是,有没有一种方法可以提供Date.now的模拟返回值,该值是从测试中在存储库中调用的,还是我应该向存储库类中注入一个DateProvider,然后从测试中模拟它?jest.spyOn(日期,'now')
应该可以工作
例如
userService.ts
:
从“/UserRepository”导入UserRepository;
类用户服务{
私有userRepository:userRepository;
构造函数(userRepository:userRepository){
this.userRepository=userRepository;
}
公共异步销毁(uuid:string):承诺{
等待这个.userRepository.update({userUUID:uuid},{deletedDate:Date.now()});
返回true;
}
}
导出默认用户服务;
userRepository.ts
:
类用户存储库{
公共异步更新(其中,更新程序){
返回“真实更新”;
}
}
导出默认用户存储库;
userService.test.ts
:
从“/UserService”导入UserService;
描述('60204284',()=>{
描述(“#用户服务”,()=>{
描述(“#销毁”,()=>{
它('应该软删除用户',异步()=>{
const mUserRepository={update:jest.fn()};
const userService=新的userService(mUserRepository);
jest.spyOn(日期,'now').mockReturnValueOnce(1000);
const actual=await userService.destroy('uuid-xxx');
expect(实际).toBeTruthy();
expect(mUserRepository.update).toBeCalledWith({userUUID:'uuidxxx'},{deletedDate:1000});
});
});
});
});
100%覆盖率的单元测试结果:
PASS stackoverflow/60204284/userService.test.ts
60204284
#用户服务
#毁灭
✓ 应软删除用户(9ms)
----------------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
userService.ts | 100 | 100 | 100 | 100 |
----------------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:5.572秒,估计11秒
源代码:
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() });
});
});