【自动化测试07】nodejs代码覆盖率测试工具Istanbul(nyc)
- 一、代码覆盖率?
- 二、测试nodejs代码覆盖率的工具优缺点介绍
- 三、Istanbul(nyc)
-
- 1、简介
- 2、官网
- 3、安装
- 4、在项目的package.json 脚本中添加如下命令:
- 5、配置脚本:在你的项目根目录中,创建一个名为 .nycrc 的文件,并添加以下配置信息:
- 6、运行测试并生成覆盖率报告:在你的项目根目录下,运行以下命令:
- 7、查看报告
原创作者:郑同学的笔记
原文链接:https://zhengjunxue.blog.csdn.net/article/details/134207288
一、代码覆盖率?
代码覆盖率是指用于衡量测试用例是否覆盖了应用程序中的每个代码行、分支、函数或语句的度量。代码覆盖率可以帮助开发人员了解他们的测试用例是否足够全面,以及哪些代码需要进一步测试。它是衡量软件质量和可靠性的重要指标之一。
在测试代码覆盖率时,我们需要执行测试用例并记录每个代码行、分支、函数或语句的执行情况。测试代码覆盖率的方法有很多,例如手动测试、自动化测试和代码静态分析。其中,自动化测试是最常用的方法之一,因为它可以自动运行测试用例,并生成测试报告和度量数据。
二、测试nodejs代码覆盖率的工具优缺点介绍
Node.js 中常用的测试代码覆盖率工具有 Istanbul(nyc)、Jest 和 Mocha 等。下面是这些工具的优缺点介绍:
Istanbul(nyc)
优点:易于安装和使用,支持多种覆盖率格式和报告输出。
支持所有主流的 JavaScript 测试框架,例如 Mocha、Jasmine、AVA 等。
可以针对不同的文件和行进行统计,提供详细的覆盖率信息。 缺点:
配置文件较为复杂,需要手动编写或者使用其他工具生成。
对于大型项目,可能会导致测试运行速度变慢。
Jest
优点:集成了测试、断言和覆盖率分析功能,使用起来比较方便。
自带 Mock 功能,可以模拟各种场景,方便编写测试用例。
支持并行测试,可以提高测试运行速度。 缺点:
需要为每个测试文件编写配置文件,增加了额外的工作量。
对于一些高级的测试需求,Jest 的灵活性有限。
Mocha
优点:灵活性强,可以适应各种测试需求。
支持多种测试框架和模块,易于扩展。
支持并行测试,可以提高测试运行速度。 缺点:
需要手动编写覆盖率分析代码,增加了工作量。
没有自带 Mock 功能,需要使用第三方库来实现 Mock。
综上所述,不同的测试代码覆盖率工具有各自的优缺点。选择合适的工具需要考虑项目的大小、测试需求和团队成员的经验等因素。一般来说,对于小型项目,可以选择 Jest 作为测试工具;对于大型项目,则建议使用 Istanbul(nyc)或者 Mocha 等更灵活的工具。
三、Istanbul(nyc)
1、简介
下面,我们将详细介绍Istanbul(nyc)的简介和使用。
Istanbul(nyc)是一个基于Node.js的代码覆盖率测试工具,它可以帮助开发人员衡量他们的测试用例是否覆盖了应用程序中的每个代码行、分支、函数或语句。它支持多种输出格式,例如HTML、LCOV、JSON等,可以方便地生成测试报告和度量数据。此外,Istanbul(nyc)还提供了一些有用的命令行选项和配置参数,以满足不同应用场景的需求。
2、官网
https://www.npmjs.com/package/nyc
https://github.com/istanbuljs/nyc
3、安装
npm i nyc
or
npm install nyc
也可用全局安装,全局安装后,你就可用使用nyc命令了
npm install --global nyc
4、在项目的package.json 脚本中添加如下命令:
"scripts": {
"test": "mocha --recursive",
"cov": "SET NODE_ENV=development && nyc node index.js"
}
5、配置脚本:在你的项目根目录中,创建一个名为 .nycrc 的文件,并添加以下配置信息:
{
"reporter": [
"text",
"html"
],
"exclude": [
"node_modules",
"test"
]
}
上述配置将生成文本和 HTML 格式的覆盖率报告,并排除 node_modules 和 test 文件夹。
6、运行测试并生成覆盖率报告:在你的项目根目录下,运行以下命令:
npm run cov
7、查看报告
方式一:当前项目目录的coverage文件夹
方式二:(全局安装nyc的情况下)
执行
nyc report
参考
nodejs 测试覆盖度工具nyc(Istanbul)简介:https://www.jianshu.com/p/fd7ed6087512