Node.js+MongoDB项目Jest测试执行后报错:文件不存在问题排查
问题排查与解决方案
1. 修复Jest配置中的语法错误
你的jest.config.js里使用了中文引号(‘’、“”),这会导致配置解析异常,是Jenkins环境下触发问题的关键之一:
// 修正后的配置 const config: Config.InitialOptions = { preset: 'ts-jest', testEnvironment: 'node', verbose: true, coveragePathIgnorePatterns: ["/node_modules/"], // 改用正则写法,避免字符串转义错误 coverageProvider: "v8", testMatch: ['/tests/**/*.ts?(x)', '**/?(*.)+(spec|test).ts?(x)'], setupFilesAfterEnv: ['./jest.setup.ts'], collectCoverage: true, coverageDirectory: "./coverage", // 改为相对路径,避免Jenkins用户无权限操作根目录 } export default config;
重点修正点:
- 所有引号替换为英文单/双引号
coveragePathIgnorePatterns使用正则格式"/node_modules/",避免转义失误coverageDirectory从绝对路径"/coverage"改为相对路径"./coverage",解决权限限制问题
2. 切换覆盖率收集器
v8覆盖率收集器对依赖包的sourcemap解析更严格,当mongodb-connection-string-url这类依赖的sourcemap指向不存在的源码文件时,会触发ENOENT错误。可以切换为babel收集器:
coverageProvider: "babel",
切换后需安装对应依赖:
npm install --save-dev @babel/core babel-jest
3. 清理Jenkins依赖缓存
Jenkins的依赖缓存可能存在损坏或不完整的情况,在构建步骤中添加:
rm -rf node_modules package-lock.json npm install
避免使用npm ci(该命令会严格按lockfile安装,可能跳过依赖的源码文件生成逻辑)
4. 强制忽略特定依赖的覆盖率收集
如果上述方法无效,可明确将mongodb-connection-string-url加入忽略列表:
coveragePathIgnorePatterns: [ "/node_modules/", "/node_modules/mongodb-connection-string-url/" ],
内容的提问来源于stack exchange,提问作者thinktoomuch
相关产品推荐
相关产品推荐

