javascript - Jest 单元测试 - 异步测试失败超时

标签 javascript jestjs

我收到以下错误消息“超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。”最重要的是,我还收到一条错误消息,指出在期望 2 个断言的同时执行了 0 个断言。

我尝试使用 jest.setTimeout(10000) 将超时时间延长至 10 秒,这应该足以执行该代码,但问题仍然存在。

我知道 m.employeeGetAll() 可以工作,因为当我使用浏览器测试我的 Web 应用程序时,我可以在 View 中看到员工列表。

这是我的测试的样子

it('Lists all employees successfully', () => {
  expect.assertions(2);
  return m.employeeGetAll().then(result => { //m.employeeGetAll() returns a promise       
    expect(result).toBeDefined();
    expect(result.length).toBe(3);
  });  
});

最佳答案

我发现的问题是异步代码的工作方式。

在代码片段中看不到的是在我的测试文件末尾对 mongoose.connection.close(); 的调用。

此调用必须在 Jest 单元测试框架的 afterEach()afterAll() 函数内完成。否则,在测试完成之前,与数据库的连接将被关闭,因为我的 Controller 方法中的所有调用都是异步的;这会导致不会返回任何 promise ,并且代码会超时。

由于我使用 beforeAll()afterAll(),在所有测试开始之前从数据库加载数据一次,并在结束时清除数据库在所有测试中,我还在 beforeAll() 中包含了使用 mongoose 连接到数据库的调用。

希望这可以帮助那些也陷入我的处境的人。

关于javascript - Jest 单元测试 - 异步测试失败超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48142811/

相关文章:

javascript - 在获得 Angular 5 的结果后,如何确保 typescript 接口(interface)属性为大写?

javascript - 更新组件状态以使用 Redux 查看 Flatlist 中的数据

reactjs - 如何用 Jest 覆盖 mapDispatchToProps 中的行?

javascript - React-native 的 Code Push 破解 Jest 测试

testing - 开 Jest beforeEach/afterEach 只是这个范围内的 block ?

javascript - Selectize.js 手动添加一些项目

javascript - 对 JavaScript 中的对象集合中的列求和

javascript - 如何输入具有静态属性的 React.ComponentType?

Angular FormControl Jest 测试导致 TypeError : Converting circular structure to JSON

javascript - 监视在被拒绝的 promise 中调用的函数