我收到以下错误消息"超时 - 在jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时时间内未调用异步回调。"最重要的是,我还收到一条错误消息,指出在预期2个断言时执行了0个断言。
我已经尝试使用jest.setTimeout(10000)
将超时延长到10秒,这应该是执行该代码的足够时间,但问题仍然存在。
我知道m.employeeGetAll()
有效,因为当我使用浏览器测试我的网络应用时,我可以在视图中看到员工列表。
以下是我的测试结果
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);
});
});
答案 0 :(得分:2)
我发现的问题是异步代码的工作方式。
在代码段中无法看到的是在我的测试文件的最后调用mongoose.connection.close();
。
此调用必须在Jest单元测试框架的afterEach()
或afterAll()
函数内完成。否则,在测试完成之前将关闭与数据库的连接,因为我的控制器方法中的所有调用都是异步的;这导致永远不会返回承诺并且代码进入超时状态。
由于我使用beforeAll()
和afterAll()
,在所有测试开始之前从数据库加载一次数据,并在所有测试结束时清除数据库,我'我还包括使用beforeAll()
内部的mongoose连接到数据库的调用。
希望这可以帮助那些也陷入困境的人。
答案 1 :(得分:0)
使用异步,您必须致电done
it('Lists all employees successfully', (done) => {
expect.assertions(2);
return m.employeeGetAll().then(result => { //m.employeeGetAll() returns a promise
expect(result).toBeDefined();
expect(result.length).toBe(3);
done();
});
});