JavaScript项目最常用的是Jest或nyc生成覆盖率报告:Jest通过--coverage参数输出HTML、文本等格式;nyc适用于Mocha等非Jest环境,需配置instrument和报告类型,并注意源码转译与文件包含排除。

在 JavaScript 项目中,最常用且开箱即用的方式是通过 Jest(配合内置的覆盖率支持)或 Istanbul/nyc 工具链,从命令行生成代码覆盖率报告。
使用 Jest 生成覆盖率报告
Jest 默认集成 Istanbul(via jest-jasmine2 + istanbul-lib-instrument),只需添加参数即可输出覆盖率:
- 运行测试并生成 HTML 报告:
npx jest --coverage - 指定覆盖率阈值(未达标则退出非零码):
npx jest --coverage --coverageThreshold='{"global": {"lines": 80, "branches": 70}}' - 只生成文本摘要,不生成文件:
npx jest --coverage --coverageReporters=["text-summary"] - 自定义输出目录和格式(如同时生成 HTML + LCOV):
npx jest --coverage --coverageDirectory=./coverage --coverageReporters=["html","lcov"]
确保项目中有 jest.config.js 或 package.json 中配置了 "jest" 字段,且已安装 jest(推荐 v29+)。
使用 nyc(Istanbul CLI)独立生成覆盖率
适合非 Jest 环境(如 Mocha、AVA、原生 Node.js 测试):
立即学习“Java免费学习笔记(深入)”;
- 安装:
npm install --save-dev nyc - 运行带覆盖率的测试(以 Mocha 为例):
npx nyc mocha test/**/*.test.js - 生成 HTML 报告:
npx nyc report --reporter=html - 查看终端汇总:
npx nyc report --reporter=text
可通过 nyc.config.js 或 .nycrc 配置包含/排除文件、阈值、报告类型等。
关键注意事项
-
源码需可被 instrument:ES6+、TypeScript 项目需确保 nyc 或 Jest 能正确处理转译后的代码(Jest 推荐搭配
babel-jest或ts-jest;nyc 需配@istanbuljs/nyc-config-typescript等插件) -
忽略构建产物与测试文件:默认会跳过
node_modules和test/目录,但建议在配置中显式设置include(如["src/**/*.{js,ts}"])和exclude -
CI 环境友好:多数 CI 平台(GitHub Actions、GitLab CI)支持直接上传
lcov.info文件供覆盖率服务(如 Codecov、Coveralls)解析
快速验证是否生效
执行覆盖率命令后检查:
- 是否在项目根目录或
./coverage下生成了index.html?打开它可交互查看各文件覆盖率 - 终端是否输出类似
----------------|---------|----------|---------|---------|-------------------的表格?这是文本覆盖率摘要 - 是否有警告提示 “No coverage files found”?说明测试未运行成功,或源码未被 instrument(检查
transformIgnorePatterns或require配置)


















