最近在编写Nodejs/Jest
单元测试时出现应用无法正常退出,明明单元测试已经执行完毕,但是应用就是卡住,无法正常退出,导致单元测试无法连续执行。由于应用较为复杂,很难以排查是什么原因导致的,经过分析原因主要如下:
- 未处理
async/Promise
会导致该原因,解决方法是在jest
中添加--detectOpenHandles
参数,添加该参数后,在运行时jest
会检测并给出提示,依此解决就可以。 - 还有一种情况是应用中存在未清理的
setInterval
也会导致此情况,这种情况比较隐蔽。解决方法也很简单,可以自己编写一个setSafeInterval
函数,替换一个应用中所有使用setInterval
的地方,记录一下定时器句柄,在退出前清理一下就可以了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。