Jestjs 运行promise后未调用jest函数

Jestjs 运行promise后未调用jest函数,jestjs,Jestjs,我试图在用玩笑和酶解决承诺后测试这些方法。我的组件/功能代码: // Functional Code let functionAfterAsync = () => { console.log('functionAfterAsync called'); } const asyncFunction = () => { return new Promise(resolve => resolve()); } const functionWithAsyncCode = () =&

我试图在用玩笑和酶解决承诺后测试这些方法。我的组件/功能代码:

// Functional Code
let functionAfterAsync = () => {
  console.log('functionAfterAsync called');
}
const asyncFunction = () => {
  return new Promise(resolve => resolve());
}
const functionWithAsyncCode = () => {
  // ... some more code here
  console.log('functionWithAsyncCode');
  asyncFunction().then((res: any) => {
    functionAfterAsync();
  })
}
我的测试:

functionAfterAsync = jest.fn();
// Tests
describe('<Async Test />', () => {
    it('Call function after promise', () => {
      functionWithAsyncCode();
      expect(functionAfterAsync).toBeCalled();
    })
});
但是functionAfterAsync没有被调用,我得到的错误是: expectjest.fn.toBeCalled预期已调用的模拟函数

有没有办法做到这一点。谢谢你的帮助

在断言调用了functionAfterAsync之前,您需要执行以下操作

最简单的方法是从functionWithAsyncCode返回承诺:

const functionWithAsyncCode==>{ log'functionWithAsyncCode'; return asyncFunction.then=>{//返回承诺 功能异步; } } …然后在测试中:

它“在承诺后调用函数”,async=>{//使用异步测试函数 wait functionWithAsyncCode;//等待承诺解析 expectfunctionAfterAsync.toBeCalled;//成功 } 或者,您可以在中断言。然后,和:

它“承诺后调用函数”,=>{ 返回函数WithAsyncCode.then=>{//返回承诺 expectfunctionAfterAsync.toBeCalled;//成功 }; } 在断言functionAfterAsync已被调用之前,您需要执行以下操作

最简单的方法是从functionWithAsyncCode返回承诺:

const functionWithAsyncCode==>{ log'functionWithAsyncCode'; return asyncFunction.then=>{//返回承诺 功能异步; } } …然后在测试中:

它“在承诺后调用函数”,async=>{//使用异步测试函数 wait functionWithAsyncCode;//等待承诺解析 expectfunctionAfterAsync.toBeCalled;//成功 } 或者,您可以在中断言。然后,和:

它“承诺后调用函数”,=>{ 返回函数WithAsyncCode.then=>{//返回承诺 expectfunctionAfterAsync.toBeCalled;//成功 }; }
谢谢。它起作用了。还有一个问题:如果里面的断言失败了,我怎么会失败呢。目前,它仅显示为警告UnhandledPromisejectionWarning:UnhandledPromisejection。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝未使用.catch处理的承诺。@SaravananS请确保从测试函数返回承诺。非常感谢。它起作用了。还有一个问题:如果里面的断言失败了,我怎么会失败呢。目前,它仅显示为警告UnhandledPromisejectionWarning:UnhandledPromisejection。此错误源于抛出不带catch块的异步函数内部,或拒绝未使用.catch处理的承诺。@SaravananS请确保从测试函数返回承诺