最近在写Nodejs/Jest单元测试时,应用无法正常退出。明明已经执行了单元测试,但是应用卡住了,无法正常退出,导致单元测试无法继续执行。由于应用程序的复杂性,很难找出是什么原因造成的。经过分析,主要有以下原因:unhandledasync/Promise会导致这个原因。解决办法是在jest中加上--detectOpenHandles参数。添加该参数后,jest在运行时会进行检测并给出提示,您可以据此解决。另一种情况是应用中有未清理的setInterval也会造成这种情况,比较隐蔽。解决方法也很简单,自己写一个setSafeInterval函数,将应用中所有使用setInterval的地方全部替换掉??,记录定时器句柄,退出前清理干净。
