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
启用或禁用测试覆盖率收集。
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 add @rstest/coverage-istanbul -D
@rstest/coverage-istanbul
由 swc-plugin-coverage-instrument 提供支持。
exclude
[
'**/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
是否在运行测试之前清理覆盖率目录。
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;
};
设置最低代码覆盖率要求。你可以为语句、函数、分支和行覆盖率设置阈值。
当阈值设置为正数时,表示所需的最低百分比。当阈值设置为负数时,表示允许未覆盖的最大数量。
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