Skip to content

参考

基于 Vitest v4.x / Jest v30.x 编写

速查

  • 四大指标:Statements / Branches / Functions / Lines(Branches 最关键)
  • Vitest:@vitest/coverage-v8(默认)→ vitest run --coverage
  • Jest:内置 → jest --coverage(默认 provider babel
  • 阈值:Vitest coverage.thresholds / Jest coverageThreshold,不达标即 CI fail
  • 完整说明见 入门 / 指标与 Provider / Vitest / Jest / 阈值门禁 / 最佳实践

四大指标

指标对象备注
Statements每条语句粒度最细
Branches每个判断 true/false最能暴露漏测
Functions每个函数是否被调用
Lines每物理行最直观

Vitest 配置项(节选)

字段默认说明
coverage.provider'v8'v8 / istanbul / custom
coverage.enabledfalse--coverage 等价
coverage.reporter['text','html','clover','json']报告格式
coverage.include / exclude— / []glob 白/黑名单
coverage.reportsDirectory'./coverage'输出目录
coverage.thresholds.100 / .perFile / .autoUpdate / glob
coverage.alltrue含未引用文件

Jest 配置项(节选)

字段默认说明
collectCoveragefalse自动收集
collectCoverageFrom参与文件 glob(! 排后)
coverageProvider'babel'babel / v8
coverageReporters['clover','json','lcov','text']报告格式
coverageThresholdglobal / 目录 / glob / 单文件
coveragePathIgnorePatterns['/node_modules/']跳过路径

Reporter 格式

格式用途
text / text-summary终端表格 / 一行汇总
html可点击逐行报告
lcovCodecov / Coveralls / IDE
json / json-summary程序处理 / 徽章
clover / coberturaJenkins / GitLab / Azure XML

ignore 注释对照

provider忽略一行整文件
Vitest v8/* v8 ignore next -- @preserve *//* v8 ignore file -- @preserve */
istanbul/* istanbul ignore next *//* istanbul ignore file */
Jest v8/* c8 ignore next *//* c8 ignore file */

TypeScript 下 v8 注释须加 -- @preserve,否则被 esbuild 擦除而失效。

命令对照

bash
# Vitest
vitest run --coverage
vitest run --coverage.enabled --coverage.provider=istanbul
vitest --coverage.enabled --coverage.thresholds.lines=80

# Jest
jest --coverage
jest --coverage --coverageProvider=v8
jest --coverage --collectCoverageFrom="src/**/*.ts"

# 看报告
open coverage/index.html

官方资源