如何用nx run-many --target=test --coverage排除指定项目覆盖率统计
解决方案:Nx工作区差异化控制项目覆盖率统计
方法一:通过项目配置(project.json)覆盖测试参数
直接在ProjectA的project.json中,针对test目标添加专属配置,覆盖全局的覆盖率开关:
{ "name": "projectA", "$schema": "../../node_modules/nx/schemas/project-schema.json", "targets": { "test": { "executor": "@nrwl/jest:jest", "options": { "jestConfig": "apps/projectA/jest.config.js", "collectCoverage": false // 强制关闭该项目的覆盖率收集 } } } }
执行全局命令nx run-many --target=test --coverage时,ProjectA会优先使用自身配置,仅运行单元测试不生成覆盖率数据,其他项目正常收集覆盖率,总汇总结果也不会包含它的无效0/0数据,且全程只执行一次测试,无重复耗时。
方法二:在Jest配置中动态判断参数
如果不想修改project.json,可在ProjectA的jest.config.js里根据命令行参数动态关闭覆盖率:
const baseConfig = require('@nrwl/jest/plugins/jest-preset'); module.exports = { ...baseConfig, // 仅当全局命令带--coverage时,关闭当前项目的覆盖率收集 collectCoverage: process.argv.includes('--coverage') ? false : undefined, // 保留原有其他jest配置 };
为什么之前的collectCoverageFrom: !**无效?
collectCoverageFrom仅用于指定要纳入覆盖率统计的文件范围,即使设置为!**,全局的--coverage参数仍会触发Jest生成覆盖率报告,只是没有匹配的文件,所以会出现0/0的无效结果。而直接设置collectCoverage: false是彻底关闭整个覆盖率收集流程,从根源上避免生成无效报告。
内容的提问来源于stack exchange,提问作者qxg
相关产品推荐
相关产品推荐

