jest.config配置忽略指定文件无效 覆盖率仍统计目标文件
Jest覆盖率忽略规则不生效问题解决
核心原因
你在项目根目录编写的jest.config.js没有被react-scripts加载。
Create React App 生态下的react-scripts内置了封装好的Jest默认配置,默认不会读取项目根目录下的自定义jest配置文件,这就是为什么你删除所有自定义配置后,覆盖率统计结果完全没有变化的原因——你写的配置从一开始就没生效。
解决方案
方案1:不弹出配置(推荐,无侵入)
直接在项目根目录的package.json中新增jest配置字段,react-scripts会自动读取该字段的配置,和内置默认配置合并。
覆盖率忽略规则优先用collectCoverageFrom配置,写法更直观不容易出错:
{ // 保留原有的scripts、dependencies等所有配置,新增以下jest字段即可 "jest": { "collectCoverageFrom": [ "src/**/*.{js,jsx}", "!src/index.jsx", "!src/reportWebVitals.js", "!src/**/*.test.{js,jsx}", "!src/setupTests.js" ] } }
配置规则说明:
- 不带
!前缀的路径是需要收集覆盖率的文件范围 - 带
!前缀的路径是需要排除、不统计覆盖率的文件,直接填写要忽略的文件路径即可
如果你不想把Jest配置写在package.json里,也可以引入@craco/craco这类配置覆写工具,通过craco配置文件修改Jest规则,不需要执行eject操作。
方案2:已执行eject弹出配置
如果你的项目已经执行过npm run eject,不要在根目录新建jest.config.js,直接修改config/jest目录下的内置配置文件,把覆盖率忽略规则添加到对应配置项中即可。
注意:你之前配置里的
roots: ['<rootDir>/server/tests']和执行的react-scripts test ./src命令扫描路径冲突,后续如果要同时统计前后端覆盖率,建议分开配置、分开跑前后端的测试和覆盖率命令,不要混在同一个Jest配置里。
配置校验方法
改完配置后,可以故意写一个错误的Jest配置值(比如把testEnvironment改成不存在的字符串),再执行覆盖率命令:
- 如果命令报错,说明配置已经被正确加载
- 如果命令正常执行、覆盖率结果无变化,说明配置仍然没有被读取,需要检查配置写法和存放位置
内容的提问来源于stack exchange,提问作者Leon Gaban
相关产品推荐
相关产品推荐

