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

Jest无匹配文件时如何跳过对应覆盖率阈值校验

问题原因

Jest 默认要求所有在coverageThreshold中声明的路径规则必须存在对应的覆盖率数据,你使用--changedSince参数仅收集变更文件覆盖率时,若某条路径规则对应的目录下无任何变更文件,就不会生成对应路径的覆盖率数据,因此触发报错。

Jest: Coverage data for /components//*.js was not found

解决方案

方案1:使用Jest原生配置(适用Jest v29.2及以上版本)

Jest v29.2 版本新增了allowMissingCoverage属性,给每条路径规则配置该属性为true,即可在路径无匹配覆盖率数据时自动跳过校验,不会抛出错误。
修改后的配置如下:

"coverageThreshold": {
      "global": {
        "branches": 90,
        "functions": 90,
        "lines": 90,
        "statements": 90
      },
      "**/components/**/*.js": {
        "lines": 90,
        "allowMissingCoverage": true
      },
      "**/containers/**/*.js": {
       "lines": 80,
       "allowMissingCoverage": true
      },
      "**/actions/*.js": {
       "lines": 75,
       "allowMissingCoverage": true
      },
      "**/utils/*.js": {
        "lines": 90,
        "allowMissingCoverage": true
      }
}

方案2:动态生成阈值配置(兼容低版本Jest)

如果使用的Jest版本低于29.2,可以通过脚本动态生成coverageThreshold配置,仅将存在变更文件的路径规则加入配置中:

  1. 执行git命令对比目标分支,拉取所有变更的JS文件路径
  2. 匹配变更文件所属的目录类型,仅保留对应目录的阈值规则
  3. 最终生成的配置仅包含有变更文件的路径校验规则

示例jest.config.js逻辑如下:

const { execSync } = require('child_process');
const micromatch = require('micromatch');

// 获取和development分支对比的所有变更js文件
const changedFiles = execSync('git diff --name-only development -- "*.js"', { encoding: 'utf-8' })
  .split('\n')
  .filter(Boolean);

// 预设目录和对应阈值的映射
const dirThresholdMap = {
  '**/components/**/*.js': { lines: 90 },
  '**/containers/**/*.js': { lines: 80 },
  '**/actions/*.js': { lines: 75 },
  '**/utils/*.js': { lines: 90 },
};

// 仅保留有变更文件匹配的阈值规则
const coverageThreshold = {
  global: {
    branches: 90,
    functions: 90,
    lines: 90,
    statements: 90
  }
};
Object.entries(dirThresholdMap).forEach(([glob, threshold]) => {
  if (micromatch.some(changedFiles, glob)) {
    coverageThreshold[glob] = threshold;
  }
});

module.exports = {
  // 其余Jest配置项
  coverageThreshold,
};

使用该方案前需要先安装micromatch依赖用于路径匹配。

补充说明

你当前执行的命令多输入了一个连字符,修正后的命令为:
jest --passWithNoTests --coverage --changedSince=development

内容的提问来源于stack exchange,提问作者paragxviii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:15:03