@ code- pushup/ coverage- plugin (英语)
🧪 用于跟踪代码覆盖的代码PushUp插件. ☂️
此插件允许您在您的工程中测量和跟踪代码覆盖 . 它接受LCOV覆盖格式,并合并所提供的任何测试套件的覆盖结果.
以下列方式将测量的覆盖类型映射到代码推倒审计中
- 该值在0-100之间,代表所有通过的结果的代码覆盖(涵盖/共计(中文(简体) )
- 得分是转换为 0 - 1 范围的值
- 缺失的涵盖范围按审计细节(非所谓的功能、未发现的分支或行)的问题绘制
[大 为了在插件内成功运行覆盖工具并直接收集覆盖结果,所有测试需要通过!
开始
-
如果还没有安装 @ code- pushup/ cli (英语) 并创建配置文件.
-
编写现有的代码覆盖结果文件或命令,用于您选择的生成结果的覆盖工具。 设定 lcov 为配置的记者( Jest 实例) 这里) (中文(简体) ).
-
将此插件添加到
plugins在代码 PushUp CLI 配置文件中的数组(例如 .code-pushup.config.js) (中文(简体) ).密码覆盖的路由以 LCOV 格式生成, 并选择定义您要先运行的代码覆盖工具 . 所有覆盖类型都是默认计量的. 如果要集中处理某一类提供的保险,请在
coverageTypes。 。 。 .QQ 请注意, 当定义工具命令时, 您仍然需要定义所有相关覆盖结果的路径 .
配置将类似以下:
import coveragePlugin from '@code-pushup/coverage-plugin'; export default { // ... plugins: [ // ... await coveragePlugin({ reports: ['coverage/lcov.info'], coverageToolCommand: { command: 'npx', args: ['jest', '--coverage', '--coverageReporters=lcov'], }, }), ], }; -
(可选) 引用单个审计或提供的插件组,您希望在自定义类别中包含( 使用)
npx code-pushup print-config以列出审计和组别.QQ 根据每一覆盖类型对总的类别分数的影响分配权重(分配权重0只包括作为额外信息,而不影响类别分数).
export default { // ... categories: [ { slug: 'code-coverage', title: 'Code coverage', refs: [ { type: 'group', plugin: 'coverage', slug: 'coverage', weight: 1, }, // ... ], }, // ... ], }; -
用 CLI 运行 CLI
npx code-pushup collect并查看或上传报告(参见 CLI 文档) (中文(简体) ).
关于代码覆盖
代码覆盖范围是一个度量标准,它表明通过单位测试执行源代码的百分比. 它可以让人们深入了解测试的有效性,并发现源代码中如果不经过测试,部分内容就得不到检验.
- 声明覆盖面: 测量至少一个测试中执行的语句数量.
- 线路覆盖: 测量至少一个测试中执行的行数 。 与语句覆盖不同,任何部分被执行的行都算向行覆盖.
- 条件覆盖: 测量所有条件值(
true编号 :false)在至少一个测试中被评价为有条件陈述. - 部门覆盖面: 衡量因有条件声明而执行的分支数量(
if编号 :else在至少一个测试中。 在短路逻辑的情况下,只计算已执行路径. 与条件覆盖不同,它并不能保证条件值的所有组合都经过测试. - 职能覆盖:衡量至少一个测试中需要多少功能. 参数值,使用可选参数或默认值,与这个度量无关.
[大 请注意,代码覆盖不同于测试覆盖. 测试覆盖面衡量测试涵盖的接受标准的数量,难以正式核实。 这意味着代码覆盖不能保证所设计的软件符合业务要求.
如果你想了解更多的代码覆盖范围和如何衡量每种类型的覆盖范围,请前往 软件测试帮助。 。 。 .
LCOV 格式
LCOV 格式最初为 日内瓦 覆盖工具在C/C++项目中的结果. 它承认下列实体:
- TN [测试名称]
- SF [来源文件]
- FN [行号] [函数名]
- FNF [找到的函数数]
- FNH[被击中的功能数]
- [点击次数][功能名]
- BRDA [行号] [块号] [处名] [点击次数]
- BRF [发现的分支数]
- BRH [取入的分支数]
- DA [行数] [点击次数]
- LF [找到行]
- LH [线打]
给 是以上信息的来源.
[注] 分支名称通常是一个从0指数化的数字,表示真伪/虚伪条件或循环条件.
插件架构
插件配置规格
该插件接受以下参数:
coverageTypes: 您想要跟踪的一系列覆盖类型。 支持的数值 :function, (中文(简体) ),branch, (中文(简体) ),line。默认所有可用的类型.reports: 包含有代码覆盖结果的文件信息阵列. 目前支持LCOV格式.- 对于一个单一的项目来说,作为字符串提供结果的路径就足够了.
- 如果你有一个单曲, 两种结果路径(
resultsPath从根到投影的路径pathToProject需要为LCOV格式提供。 对于 Nx 单列, 您可以使用我们的助手函数getNxCoveragePaths以自动获取路径信息.
- (可选)
coverageToolCommand:如果您想要运行您的覆盖工具来先生成结果, 您可以在此定义它 . - (可选)
scoreTargets: 如果您的覆盖目标不是100%, 您可以在此定义范围为 0-1 。 任何超过所定义阈值的分数都会得到完美的分数. 数值不会受到影响.
审计和小组
此插件为您配置中的方便声明提供了一组 。 在这样定义时,所有计量的覆盖范围类型审计都具有相同的权重.
// ...
categories: [
{
slug: 'code-coverage',
title: 'Code coverage',
refs: [
{
type: 'group',
plugin: 'coverage',
slug: 'coverage',
weight: 1,
},
// ...
],
},
// ...
],
每个覆盖类型仍然有自己的审计。 因此,当您想要包含一个子集的覆盖类型或者为它们分配不同的权重时,您可以采取以下方式:
// ...
categories: [
{
slug: 'code-coverage',
title: 'Code coverage',
refs: [
{
type: 'audit',
plugin: 'coverage',
slug: 'function-coverage',
weight: 2,
},
{
type: 'audit',
plugin: 'coverage',
slug: 'branch-coverage',
weight: 1,
},
// ...
],
},
// ...
],
审计产出
审计是将一个覆盖类型的所有结果汇总到插件上.
对于函数和分支,一个问题指一个没有包括在任何测试中的分支或函数的单一实例,并算作错误。 在线路覆盖方面,一个问题将任何连续线路的金额组合在一起,以减少问题总数,并算作警告.
例如,以下内容可以作为项目覆盖的审计产出.
{
"slug": "line-coverage",
"displayValue": "95 %",
"score": 0.95,
"value": 95,
"details": {
"issues": [
{
"message": "Lines 7-9 are not covered in any test case.",
"severity": "warning",
"source": {
"file": "packages/cli/src/lib/utils.ts",
"position": {
"startLine": 7,
"endLine": 9
}
}
}
]
}
}
覆盖面结果的改变
目前,LCOV结果包括: (empty-report) 缺少覆盖的函数。 这表明了各种进出口,而不是实际的功能。 因此,这些结果被忽略了.
以 Nx 单列波提供覆盖结果
作为插件的一部分,有一个 getNxCoveragePaths 如果您正在使用 Nx 来设置覆盖结果的路径, 帮助者会接受所有相关目标( 例如) . test 或者说 unit-test)和搜索覆盖路径选项.
目前支持 Jest 和 Vest 配置选项 :
- 对于
@nx/jest它正在寻找执行者coverageDirectory选项. - 对于
@nx/vite它正在寻找执行者reportsDirectory选项.
[大 请注意,您需要在您的
project.json目标选项。 测试配置文件没有被搜索 .