Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 嘲弄日期。现在在nestJs中开玩笑_Node.js_Typescript_Unit Testing_Jestjs_Nestjs - Fatal编程技术网

Node.js 嘲弄日期。现在在nestJs中开玩笑

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函

我正在尝试找出如何在我的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函数,但是我的存储库中的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() });
    });
  });