添加新配置后Jest测试脚本执行异常问题求助
NestJS Jest测试通过但脚本崩溃问题
问题场景
在使用NestJS框架时,执行测试脚本:
"test:cov": "jest --runInBand --coverage --watchAll=false --detectOpenHandles --forceExit"
所有测试用例均执行通过,但脚本最终出现崩溃。该问题始于在jest.config.js的roots属性中添加新路径之后。
原本使用的依赖版本为jest@29.5.0和ts-jest@29.0.5,将二者降级至jest@27.2.5和ts-jest@27.0.3后,崩溃问题得到解决。
可能原因分析
- Jest 29与ts-jest 29的兼容性bug:Jest 29版本在多
roots路径的处理逻辑上存在缺陷,结合覆盖率收集功能时,对新路径下的文件进行资源扫描或加载可能出现异常,导致即使通过--forceExit也无法正常终止进程。 - 新路径下的资源泄漏:新增的
roots路径中可能包含非测试文件(如业务模块、工具类),这些文件被Jest意外加载后,存在未关闭的资源连接(如数据库连接、WebSocket服务),Jest 29的--detectOpenHandles机制未能正确识别或处理这些资源,引发进程崩溃。 - 覆盖率收集机制冲突:Jest 29的覆盖率收集模块在处理多根路径时,可能出现内存泄漏或文件遍历异常,进而导致脚本崩溃。
额外排查方向
- 检查新增的
roots路径,确认是否包含非测试文件,可通过testMatch或testPathIgnorePatterns配置限制Jest仅加载测试文件。 - 移除
--forceExit参数,运行测试脚本查看崩溃时的详细错误栈,定位具体的资源泄漏点。 - 尝试升级
jest和ts-jest至29.x系列的最新稳定版本,验证官方是否已修复相关路径处理的bug。 - 在
jest.config.js中配置coveragePathIgnorePatterns,排除新增路径下不需要生成覆盖率的文件,观察崩溃问题是否消失。
内容的提问来源于stack exchange,提问作者Caio Vinícius
相关产品推荐
相关产品推荐

