Jest无限挂起且未执行任何测试,求解决方法
我之前也碰到过一模一样的情况!当时折腾了好一阵才搞定,给你几个可以尝试的排查方向:
检查测试文件的命名与匹配规则
Jest默认只会识别符合特定命名的测试文件,比如*.test.js、*.spec.js,或者放在__tests__目录下的文件。如果你的测试文件命名不符合这个默认规则,Jest会找不到可用的测试用例,进而出现这种计数无限增长的情况。你可以在jest.config.js里查看testMatch或testRegex配置项,调整成适配你文件命名的匹配格式。排查异步代码的收尾逻辑
如果你的测试用例里包含异步操作(比如Promise、setTimeout这类),但没有用async/await、done回调,或者忘记返回Promise,Jest会一直等待异步操作完成,导致计数停不下来。仔细检查你的测试代码,确保所有异步逻辑都正确收尾:// 正确示例:用async/await处理异步 test('异步数据获取测试', async () => { const result = await fetchTargetData(); expect(result).toBe('预期数据'); }); // 或者用done回调告知Jest测试完成 test('异步数据获取测试', (done) => { fetchTargetData().then(result => { expect(result).toBe('预期数据'); done(); // 必须调用done,否则Jest会一直等待 }); });彻底清理依赖与缓存
虽然你已经用了--no-cache,但有时候残留的缓存或依赖冲突还是会搞事情。可以试试:- 删除
node_modules和锁文件,重新安装依赖:rm -rf node_modules package-lock.json yarn.lock npm install # 或者用 yarn install - 手动删除Jest的缓存目录(默认是
node_modules/.cache/jest),再重新运行测试。
- 删除
检查Jest与Node版本的兼容性
你使用的Node版本是8.9.4,属于比较旧的版本了,部分新版本的Jest已经不再支持Node 8。可以尝试把Jest降级到兼容的版本,比如Jest 24.x系列(Jest 25及以上版本不再支持Node 8)。修改package.json里的Jest版本后重新安装:"devDependencies": { "jest": "^24.9.0" }排查全局钩子的异步逻辑
如果你的setupFiles、setupFilesAfterEnv配置文件,或者全局的beforeAll/afterAll钩子中存在未正确处理的异步操作,也会导致Jest一直处于等待状态。检查这些全局配置代码,确保异步逻辑都能正常完成。
你可以按上面的顺序逐一排查,应该能找到问题根源!
内容的提问来源于stack exchange,提问作者Abraham P

