coverage

  • 类型:
type CoverageOptions = {
  enabled?: boolean;
  provider?: 'istanbul';
  exclude?: string[];
  reporters?: (keyof ReportOptions | ReportWithOptions)[];
  reportsDirectory?: string;
  clean?: boolean;
  thresholds?: CoverageThresholds;
};
  • 默认值: undefined
  • 版本: >=0.4.0

收集测试覆盖率信息并生成覆盖率报告。

$ npx rstest --coverage

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |
 index.ts |     100 |      100 |     100 |     100 |
----------|---------|----------|---------|---------|-------------------

选项

enabled

  • 类型: boolean
  • 默认值: false
  • CLI: --coverage, --coverage=false

启用或禁用测试覆盖率收集。

CLI
rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
  },
});

provider

  • 类型: 'istanbul'
  • 默认值: 'istanbul'

选择覆盖率收集方式。目前仅支持 istanbul

rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
    provider: 'istanbul',
  },
});

Istanbul provider

Istanbul 是一个广泛使用的 JavaScript 代码覆盖率分析工具,它通过插桩的方式来收集代码覆盖率信息。

要启用 istanbul 覆盖率,需要先安装 @rstest/coverage-istanbul

npm
yarn
pnpm
bun
npm add @rstest/coverage-istanbul -D

@rstest/coverage-istanbulswc-plugin-coverage-instrument 提供支持。

exclude

  • 类型: string[]
  • 默认值:
[
  '**/node_modules/**',
  '**/dist/**',
  '**/test/**',
  '**/__tests__/**',
  '**/__mocks__/**',
  '**/*.{test,spec}.[jt]s',
  '**/*.{test,spec}.[c|m][jt]s',
  '**/*.{test,spec}.[jt]sx',
  '**/*.{test,spec}.[c|m][jt]sx',
];

匹配 glob 规则的文件将从测试覆盖率收集中排除。

rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
    exclude: ['**/node_modules/**', '**/dist/**'],
  },
});

reporters

  • 类型: (ReporterName | [ReporterName, ReporterOptions>])[]
  • 默认值: ['text', 'html', 'clover', 'json']

用于覆盖率收集的报告器。每个报告器可以是字符串(报告器名称)或包含报告器名称及其选项的元组。

rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
    reporters: [
      'html',
      ['text', { skipFull: true }],
      ['json', { file: 'coverage-final.json' }],
    ],
  },
});

reportsDirectory

  • 类型: string
  • 默认值: './coverage'

存储覆盖率报告的目录。

rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
    reportsDirectory: './coverage-reports',
  },
});

clean

  • 类型: boolean
  • 默认值: true

是否在运行测试之前清理覆盖率目录。

rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
    clean: true,
  },
});

thresholds

  • 类型:
type CoverageThresholds = {
  /** 语句的阈值 */
  statements?: number;
  /** 函数的阈值 */
  functions?: number;
  /** 分支的阈值 */
  branches?: number;
  /** 行的阈值 */
  lines?: number;
};
  • 默认值: undefined

设置最低代码覆盖率要求。你可以为语句、函数、分支和行覆盖率设置阈值。

当阈值设置为正数时,表示所需的最低百分比。当阈值设置为负数时,表示允许未覆盖的最大数量。

rstest.config.ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  coverage: {
    enabled: true,
    thresholds: {
      statements: 80,
      functions: 80,
      branches: 80,
      lines: -10,
    },
  },
});

当代码覆盖率低于指定阈值时,测试将失败并输出如下错误信息:

Error: Coverage for statements 75% does not meet global threshold 80%
Error: Coverage for functions 75% does not meet global threshold 80%
Error: Coverage for branches 75% does not meet global threshold 80%
Error: Uncovered lines 20 exceeds maximum global threshold allowed 10