Javascript 在函数中使用Jest测试承诺的结果

Javascript 在函数中使用Jest测试承诺的结果,javascript,typescript,testing,promise,jestjs,Javascript,Typescript,Testing,Promise,Jestjs,笑话涵盖了给定函数返回承诺的情况,并演示了如何测试它。 但是如何测试调用函数内承诺的。然后的void函数呢 下面是一个例子,说明我是如何考虑这样做的,但这不起作用 功能 函数dummyFunction():void{ dummyService.getDummy$()。然后((dummy:dummy):void=>{ log(`Dummy fetched`); }); } 测试 "jest": "26.0.1" "ts-jest": "26.0.0" descripe(`dummyFuncti

笑话涵盖了给定函数返回承诺的情况,并演示了如何测试它。
但是如何测试调用函数内承诺的
。然后
的void函数呢

下面是一个例子,说明我是如何考虑这样做的,但这不起作用

功能

函数dummyFunction():void{
dummyService.getDummy$()。然后((dummy:dummy):void=>{
log(`Dummy fetched`);
});
}
测试

"jest": "26.0.1"
"ts-jest": "26.0.0"
descripe(`dummyFunction()`,():void=>{
让dummyServiceGetDummy$Spy:jest.SpyInstance;
让我来安慰你:开玩笑;
在每个(():void=>{
dummyServiceGetDummy$Spy=jest.spyOn(dummyService,`getDummy$`).mockImplementation();
consoleLogSpy=jest.spyOn(console,`log`).mockImplementation();
});
它(`should fetch dummy`,():void=>{
期望.断言(2);
dummy函数();
期望(dummyServiceGetDummy$Spy).已被调用时间(1);
期望(dummyServiceGetDummy$Spy).tohavenCalledWith();
});
描述(`when dummy被成功获取`,():void=>{
在每个(():void=>{
dummyServiceGetDummy$Spy.mockReturnValue(():Promise=>Promise.resolve());
});
它(`should log`,():void=>{
期望.断言(2);
dummy函数();
期望(控制台提交)。已被催收时间(1);
expect(consoleLogSpy).toHaveBeenCalledWith(`Dummy fetched`);
});
});
});
依赖关系

"jest": "26.0.1"
"ts-jest": "26.0.0"

承诺封装是一种反模式
dummyFunction
应向chain返回承诺,以便正确重用和测试:

function dummyFunction(): void {
   return dummyService.getDummy$().then((dummy: Dummy): void => {
      console.log(`Dummy fetched`);
   });
}
然后可以使用内置的Jest promise支持对其进行测试:

   it(`should fetch dummy`, async () => {
      await expect(dummyFunction()).resolves.toBe(undefined);

      expect(dummyServiceGetDummy$Spy).toHaveBeenCalledWith();
      expect(consoleLogSpy).toHaveBeenCalledWith(`Dummy fetched`);
   });

谢谢,我将尝试更改我的代码。但是,弯曲代码来处理覆盖率似乎有点奇怪。由于该方法返回承诺,因此遵循文档肯定可以做到这一点。将记住在可能的情况下更改所有函数以返回承诺。非常感谢。