我收到以下错误消息“超时 - 在 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/