bahmutov/check-code-coverage
GitHub: bahmutov/check-code-coverage
一个用于检查NYC生成的代码覆盖率报告,确保文件覆盖准确性的工具。
Stars: 25 | Forks: 35
# 检查代码覆盖率 [][ci url] 
## 使用
```
npm i -D check-code-coverage
# 检查 .nyc_output/out.json 是否只覆盖了 foo.js 和 bar.js 文件
npx only-covered foo.js bar.js
```
观看这些短视频,了解这些工具的实际运作:
- [使用第三方工具稳健地检查代码覆盖率](https://youtu.be/dwU5gUG2-EM)
- [为你的项目添加代码覆盖率徽章](https://youtu.be/bNVRxb-MKGo)
- [在提交状态检查中显示代码覆盖率](https://youtu.be/AAl4HmJ3YuM)
## 检查覆盖率
检查文件是否存在于输出 JSON 文件中,并且具有 100% 的语句覆盖率。
```
# 检查 .nyc_output/out.json 是否对 main.js 有 100% 的代码覆盖率
npx check-coverage main.js
# 从特定 JSON 文件读取覆盖率报告
check-coverage --from examples/exclude-files/coverage/coverage-final.json main.js
```
文件名必须以 "main.js" 结尾。你可以指定路径的一部分,如下所示:
```
npx check-coverage src/app/main.js
```
你可以传入多个文件名。
```
npx check-coverage main.js src/person.js
```
## 仅覆盖
检查覆盖率 JSON 文件是否只包含指定的文件列表,没有其他文件。默认情况下,`only-covered` 脚本会从当前工作目录读取 `.nyc_output/out.json` 文件。你可以使用 `--from` 参数指定不同的文件。
```
# 检查覆盖率是否只包含两个文件的信息
only-covered src/lib/utils.ts src/main.js
# 从另一个文件读取覆盖率,并检查是否只包含 "main.js" 的信息
only-covered --from examples/exclude-files/coverage/coverage-final.json main.js
```
## 检查总覆盖率
如果你使用 `json-summary` 报告器生成覆盖率报告,你可以检查总语句覆盖率百分比。
```
check-total
# 使用默认选项
check-total --from coverage/coverage-summary.json --min 80
```
如果总覆盖率大于或等于最小值,命令以 0 退出。如果代码覆盖率低于最小值,命令以代码 1 退出。在大多数 CI 环境中,任何以非零代码退出的命令都会导致构建失败。
## 更新徽章
如果你的 README.md 包含 Shields.io 徽章,如下所示:
```

```
你可以使用 `coverage/coverage-summary.json` 中的语句覆盖百分比来更新它,运行:
```
update-badge
```
如果覆盖摘要为 96%,则上述徽章将更新为:
```

```
- 徽章将根据覆盖率显示不同的颜色,详情参见 [bin/update-badge.js](bin/update-badge.js)
- 如果未找到代码覆盖率徽章,将在第一行插入新的徽章。
你可以更改用于读取覆盖率的 JSON 摘要文件名:
```
update-badge --from path/to/json/summary/file.json
```
你也可以跳过读取文件,直接设置覆盖率数字:
```
update-badge --set 78
update-badge --set 78%
```
相关项目:[dependency-version-badge](https://github.com/bahmutov/dependency-version-badge)
## 设置 GitHub 状态
如果你在 [GitHub Actions](https://glebbahmutov.com/blog/trying-github-actions/) 上运行测试,有一种简单的方法可以添加包含代码覆盖率百分比的提交状态。在你的 CI 工作流中使用命令:
```
- name: Set code coverage commit status 📫
run: npx -p check-code-coverage set-gh-status
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
这应该会显示如下所示的提交状态消息:

此脚本默认从 `coverage/coverage-summary.json` 读取代码覆盖率摘要(你可以使用 `--from` 选项指定不同的文件名),并发布提交状态,目前始终通过。
**注意:** 要写入提交状态,GitHub 令牌需要"写入"权限,请在你的工作流文件中设置:
```
permissions:
statuses: write
```
如果 README 文件中包含覆盖率徽章,你可以添加第二个状态检查。此检查将从 README 文件(通过解析徽章文本)读取代码覆盖率,如果覆盖率下降超过 1 个百分点,则会设置失败状态检查。**提示:** 在拉取请求上使用此检查,以确保测试和代码在合并前同步更新。
```
- name: Ensure coverage has not dropped 📈
run: npx -p check-code-coverage set-gh-status --check-against-readme
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

### 拉取请求
在为 GitHub 拉取请求设置状态时,你需要使用合并提交的 SHA。你可以将其作为 `GH_SHA` 环境变量传入。
```
- name: Ensure coverage has not dropped 📈
run: npx -p check-code-coverage set-gh-status --check-against-readme
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_SHA: ${{ github.event.after }}
```
## 调试
要查看详细的日志消息,请使用 `DEBUG=check-code-coverage` 环境变量运行。
标签:CMS安全, GNU通用公共许可证, Istanbul, JavaScript, JSON解析, MITM代理, Node.js, npm, NYC, pocsuite3, SOC Prime, 代码审查, 代码覆盖率, 前端测试, 后端测试, 开发工具, 开发流程, 数据可视化, 文件覆盖, 测试工具, 测试报告, 测试覆盖, 脚本工具, 自定义脚本, 覆盖率报告, 覆盖率检查, 质量保证, 软件测试