Vue项目中Jest收集代码覆盖率时报错:Jest: a transform must export a `process` function
解决Jest覆盖率统计时的
a transform must export a process function报错 这个报错我之前在Vue项目做单元测试覆盖率统计时也碰到过,核心问题是Jest配置里的某个转换器没有正确导出process函数,结合你的配置和依赖来看,主要是版本冲突和冗余配置导致的,给你几个具体的解决步骤:
1. 对齐Jest相关依赖版本
你的依赖里babel-jest用的是27.x版本,但ts-jest是26.x,@vue/cli-plugin-unit-jest是4.x(对应Jest 26版本),版本不兼容会导致转换器的API不匹配,触发报错。
修改package.json里的依赖版本,统一对齐到26.x:
{ "dependencies": { // ... 其他依赖不变 "babel-jest": "^26.6.3", "ts-jest": "^26.6.3" } }
然后执行npm install(或yarn install)重新安装依赖。
2. 检查自定义SVG转换器的正确性
你在Jest配置里自定义了SVG转换器<rootDir>/src/svgTransform.js,必须确保这个文件正确导出process函数。如果文件内容缺失或格式错误,就会触发这个报错。
正确的SVG转换器示例:
// src/svgTransform.js module.exports = { process(src) { // 将SVG内容转为字符串导出,适配Jest return `module.exports = ${JSON.stringify(src)};`; }, };
3. 简化Jest配置,避免冗余
你使用了@vue/cli-plugin-unit-jest/presets/typescript-and-babel预设,这个预设已经帮你配置好了vue-jest、ts-jest、babel-jest的转换规则,手动重复配置会导致冲突。
修改你的jest.config.js,只保留自定义的SVG转换规则:
module.exports = { preset: "@vue/cli-plugin-unit-jest/presets/typescript-and-babel", moduleFileExtensions: ["js", "ts", "json", "vue"], modulePaths: ["./src"], transform: { "^.+\\.svg$": "<rootDir>/src/svgTransform.js" }, collectCoverage: true, collectCoverageFrom: [ "**/*.{ts,vue}", "**/*.{js,jsx}", "!**/node_modules/**", "!**/coverage/**", "!**/index.js" ], coverageReporters: ["text", "cobertura"], reporters: ["default", "jest-junit"] };
4. 清除Jest缓存
最后执行命令清除Jest的缓存,避免旧的转换缓存干扰:
npx jest --clearCache
完成以上步骤后,再运行npm run test:unit,应该就能正常收集覆盖率了。
内容的提问来源于stack exchange,提问作者Sonali
相关产品推荐
相关产品推荐

