javascript项目导出json覆盖率文件需通过jest、vitest或nyc等工具生成标准coverage-final.json:jest配置coveragereporters:['json'],vitest配置coverage.reporter:['json'],nyc可用report命令合并;文件符合istanbul schema,供ci平台解析。

在 JavaScript 项目中导出 JSON 格式覆盖率文件,核心是通过测试运行器(如 Jest、Vitest 或 Mocha)配合代码覆盖率工具(如 Istanbul / nyc)生成标准的 coverage/coverage-final.json 或类似结构的 JSON 报告。
使用 Jest 导出 JSON 覆盖率文件
Jest 默认使用 istanbul-lib-coverage,只需配置即可输出 JSON 格式报告:
- 在
jest.config.js中添加:coverageReporters: ['json', 'html']
运行npm test -- --coverage后,会在coverage/目录下生成coverage-final.json(原始数据)和coverage/coverage-summary.json(汇总)。 - 若只要 JSON 不要 HTML,可只保留
['json'];json-summary可额外生成精简版汇总 JSON。 - 注意:
coverage-final.json是各文件覆盖率的原始合并结果,格式为{ "path/to/file.js": { ... } },符合 Istanbul JSON Schema。
使用 Vitest 导出 JSON 覆盖率文件
Vitest 基于 istanbul,需启用 coverage 并指定报告类型:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 在
vitest.config.ts中配置:export default defineConfig({<br> test: {<br> coverage: {<br> provider: 'istanbul',<br> reporter: ['json', 'json-summary'],<br> reportsDirectory: './coverage'<br> }<br> }<br>) - 运行
npm run test -- --coverage,会输出coverage/coverage-final.json和coverage/coverage-summary.json。 - Vitest 也支持
c8(V8 native),但c8默认不生成coverage-final.json,需用c8 report --reporter=json手动转换。
手动提取或转换覆盖率数据
有时需要定制化导出(比如合并多环境报告、过滤路径、适配 CI 工具):
- 直接读取
coverage-final.json文件,用 Node.js 脚本处理并写入新 JSON:const fs = require('fs');<br>const coverage = JSON.parse(fs.readFileSync('./coverage/coverage-final.json', 'utf8'));<br>// 过滤 .test.js 文件<br>const filtered = Object.fromEntries(<br> Object.entries(coverage).filter(([file]) => !file.endsWith('.test.js'))<br>);<br>fs.writeFileSync('./coverage/exported.json', JSON.stringify(filtered, null, 2)); - 用
nyc(独立 Istanbul CLI)合并多个coverage*.json:nyc report --reporter=json --temp-dir=./coverage-tmp
前提是先用nyc --temp-dir=./coverage-tmp npm test生成中间数据。
常见问题与验证方式
导出后建议快速验证 JSON 是否有效、结构是否符合预期:
- 用
cat coverage/coverage-final.json | head -20查看开头,确认是对象且含文件路径键; - 用
jq 'keys' coverage/coverage-final.json检查是否至少包含一个源文件路径; - CI 场景中(如 GitHub Actions),常将
coverage-final.json上传给 SonarQube、Codecov 等平台,它们明确要求该格式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










