问题再现
运行 jest
npx jest -- test/abc.spec.js
Jest did not exit one second after the test run has completed.
This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
原因分析
所有的 cases 中某些 test 是异步加了 async
的,但是这些被测试的方法调用了另外的服务,其中一个主要的服务是 redis。是不是与 redis 服务的连接没有被断开在所有的测试完成以后,导致 jest 的进程 hang 住了?
尝试解决
Jest 应当有清除方法,在所有的测试完成以后执行。利用 Jest.afterAll()
afterAll(() => {
console.log('所有的测试已经完成.');
// 防止报错:Jest did not exit
client.end(true);
});
上面的 client.end
是 redis 断开链接的方法,client 是 redis nodejs 的 client 对象。
验证
再次运行上面的 Jest, 发现前述的警报信息消失了,证明 client.end(true)
对本次 Jest 运行有影响。
补充
如果是 mysql 未断开连接,那么可以采用 await pool.end()
来结束断开连接。