首页 > web前端 > js教程 > 正文

JS 代码覆盖率检测 - 使用 Istanbul 统计测试用例的覆盖范围

betcha
发布: 2025-09-17 15:21:01
原创
919人浏览过

js 代码覆盖率检测 - 使用 istanbul 统计测试用例的覆盖范围

JS 代码覆盖率检测,简单来说,就是看看你的测试用例到底测到了多少代码。Istanbul (现在通常叫 nyc) 是个很棒的工具,能帮你统计这个。

Istanbul 统计测试用例的覆盖范围

如何用 Istanbul (nyc) 检测代码覆盖率?

首先,你需要安装 nyc 和你用的测试框架,比如 Jest 或者 Mocha。 假设你用的是 Jest,那么:

npm install --save-dev nyc jest
登录后复制

然后,在你的

package.json
登录后复制
里面,改一下 test 命令:

{
  "scripts": {
    "test": "nyc jest"
  }
}
登录后复制

npm test
登录后复制
,就会自动生成覆盖率报告了。报告通常在
coverage
登录后复制
文件夹里,你可以打开
index.html
登录后复制
看看具体哪些代码没测到。

为什么我的覆盖率总是上不去?

覆盖率上不去,可能有很多原因。最常见的是,有些代码根本没被测试用例执行到。比如,一些错误处理的代码,只有在特定情况下才会触发。还有一些代码,可能是过时的,根本没用到了。

解决办法也很简单,就是仔细分析覆盖率报告,看看哪些代码没测到,然后针对性地写测试用例。如果发现有没用的代码,直接删掉就好。

如何忽略一些不需要覆盖率检测的文件或文件夹?

有些文件,比如配置文件、第三方库,或者一些工具脚本,可能不需要覆盖率检测。这个时候,你可以在

package.json
登录后复制
里配置
nyc
登录后复制
,告诉它忽略这些文件。

{
  "nyc": {
    "exclude": [
      "config/",
      "node_modules/",
      "scripts/"
    ]
  }
}
登录后复制

这样,

nyc
登录后复制
在统计覆盖率的时候,就会忽略
config
登录后复制
node_modules
登录后复制
scripts
登录后复制
这三个文件夹里的文件了。

如何在 CI/CD 环境中生成覆盖率报告并上传?

在 CI/CD 环境中,通常需要生成覆盖率报告,并上传到代码托管平台,比如 GitHub 或者 GitLab。这样,每次提交代码的时候,就能自动检查覆盖率是否达标。

以 GitHub Actions 为例,你可以创建一个

coverage.yml
登录后复制
文件,内容如下:

Operator
Operator

OpenAI推出的AI智能体工具

Operator 175
查看详情 Operator
name: Code Coverage

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  coverage:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js 16
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm install
      - run: npm test
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          flags: unittests
          name: codecov-umbrella
登录后复制

这个配置会监听

main
登录后复制
分支的 push 和 pull request 事件,然后自动运行测试,并把覆盖率报告上传到 Codecov。你需要先在 Codecov 上注册一个账号,然后把你的 Codecov token 配置到 GitHub Actions 的 secrets 里。

如何设置覆盖率阈值,防止代码质量下降?

为了防止代码质量下降,可以设置覆盖率阈值。比如,要求代码覆盖率必须达到 80% 以上。如果覆盖率低于这个阈值,就认为测试不通过。

package.json
登录后复制
里,你可以配置
nyc
登录后复制
check-coverage
登录后复制
选项:

{
  "nyc": {
    "check-coverage": true,
    "statements": 80,
    "branches": 80,
    "functions": 80,
    "lines": 80
  }
}
登录后复制

这样,每次运行测试的时候,

nyc
登录后复制
都会检查代码覆盖率是否达到 80%。如果没有达到,就会报错。

如何在 TypeScript 项目中使用 Istanbul (nyc)?

在 TypeScript 项目中使用 Istanbul (nyc) 稍微麻烦一点,因为需要先将 TypeScript 代码编译成 JavaScript 代码,才能进行覆盖率检测。

首先,你需要安装

ts-node
登录后复制
@types/jest
登录后复制

npm install --save-dev ts-node @types/jest
登录后复制

然后,修改你的

jest.config.js
登录后复制
文件,告诉 Jest 使用
ts-node
登录后复制
来处理 TypeScript 文件:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};
登录后复制

最后,修改你的

package.json
登录后复制
文件,告诉
nyc
登录后复制
如何运行测试:

{
  "scripts": {
    "test": "nyc --extension .ts jest"
  }
}
登录后复制

这样,

nyc
登录后复制
就会自动编译 TypeScript 代码,并生成覆盖率报告了。

以上就是JS 代码覆盖率检测 - 使用 Istanbul 统计测试用例的覆盖范围的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号