You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:02:46