转自玉伯的blog。
最近在用 Jasmine 给 KISSY 项目添加测试代码,遇到一个困惑:如何保证测试能完整覆盖到源码的所有分支?
用 Google 搜索了下 JavaScript Coverage 工具,琳琅满目。有商业版的 JavaScript Coverage Validator, 还有 FireBug 的不少扩展 JavaScript Code Coverage Tool for Firebug. 美中不足是,这些要么要花钱,要么已停止更新,杯具。
最后将目标锁定到免费开源一直更新的:JSCoverage. 不用不知道,一用立刻相见恨晚。下面简单介绍下。
下载安装非常简单,到 这里 下载 window 版本。完成后,将压缩包里的 jscoverage.exe 复制到C:\Windows\System32
. 安装完毕。
我们以 cookie 模块为范例。命令行模式,在 cookie 的上级目录 src 下输入:
jscoverage.exe cookie cookie_ --encoding=utf-8 --no-instrument=tests
运行后,就会生成 cookie_ 目录。原理是将需要检测的 js 文件重新编译,分析原始语句,并插入相应的监测代码。有兴趣的可以打开 cookie_/cookie.js 文件观摩。
--no-instrument=tests
是告诉 jscoverage 不要理会 tests 目录下的 js 文件。tests 目录下存放的是 Jasmine 测试文件,不需要监测。
接下来,在浏览器中通过服务器浏览就可以了: cookie_/jscoverage.html
在打开的页面中,点击 Summary, 可以看到:
非常清晰:cookie.js
的测试覆盖率为 91%, 点击 cookie.js
切换到 Source Tab, 可以具体看到哪些代码行没有执行。
一切就这么简单。利用 jscoverage-server.exe
, 还可以生成报告,这里就不细说了,具体请看 JSCoverage User Manual.
有了 Jasmine, 让我们可以大胆重构代码和添加新功能。
有了 JSCoverage, 则让我们对 Jasmine Specs 的覆盖率有了全局掌握,可以随心所欲。
希望这篇文章,能让你对 JS Test Coverage 工具有个初步了解。好了,继续干活。
上班途中想到的,到公司后一测,果然如此。看 test.js
:
function testFn(a, b, c) { var ret = 0; if(a || b || c) { ret++; } return ret; } testFn(1);
JSCoverage 覆盖率 100%:jscoverage.html?test.html
实际上,testFn(0, 1); testFn(0, 0, 1);
等情形都没覆盖到。原因很简单, if 语句中存在或,但 jscoverage 生成的代码,是以代码行为单位的:
_$jscoverage['test.js'][6]++; if ((a || b || c)) { _$jscoverage['test.js'][7]++; (ret++); }
能想到的一种完善方式:对于逻辑表达式,要进一步插入监测代码:
if (((_jsc() && a && _jsc()) || (_jsc() && b && _jsc()) || (_jsc() && c && _jsc()))) { // ... } // _jsc() 是 _$jscoverage['test.js'][n]++ 的示意写法
不过貌似把问题搞复杂了。
总之目前我们要知道:在 JSCoverage 里,100% != 100%.
相关推荐
JavaScript 单元测试覆盖率统计工具是指使用JavaScript Coverage 工具来检测 JavaScript 代码的单元测试覆盖率。该工具可以完整统计JavaScript 代码的覆盖率,让开发者简单方便地了解自己代码的单元测试覆盖度。 ...
Atom-coverage-markers是一款专为Atom文本编辑器设计的插件,它的主要功能是在编辑器的侧边栏(通常称为“边沟”或“ gutter”)上显示JavaScript测试覆盖率信息。这一特性对于开发者来说非常实用,因为它能直观地...
在"Node.js单元测试覆盖工具"中,Mocha通常与代码覆盖率工具结合使用,例如"Istanbul"或"nyc",以测量代码的执行情况,了解哪些部分被测试覆盖,哪些部分可能还需要更多的关注。 1. **Mocha的基本使用**:Mocha提供...
- **istanbul/nyc**:代码覆盖率工具,显示哪些代码被测试覆盖,哪些部分可能需要更多的测试。 测试环境搭建通常会涉及配置`package.json`文件,安装测试框架及相关依赖,并创建测试文件。测试文件通常以`.spec.js`...
JSCover, JSCover是度量JavaScript程序代码覆盖率的工具 JSCover一个JavaScript代码覆盖度量工具。 JSCover是一个 easy-to-use JavaScript代码覆盖率测量工具。 版本是流行的JSCoverage 工具的增强版本,增加了几个...
6. **测试框架**:Mocha、Jest和Jasmine是JavaScript中常用的测试框架,它们提供了编写单元测试和集成测试的平台,保证代码质量。 7. **调试工具**:Chrome开发者工具(DevTools)和Firefox Developer Tools是...
Istanbul是一款流行的JavaScript代码覆盖率工具,它可以与多种测试框架集成。使用Istanbul,开发者需要先运行测试,然后通过覆盖率工具分析测试结果。命令行操作通常包括以下步骤: - 安装Istanbul:`npm install ...
### 利用文档工具检测PDF中的恶意Javascript #### 摘要 自2008年起,PDF文档作为恶意软件传播的一种新兴媒介逐渐受到广泛关注。由于PDF格式的普及及其对JavaScript的支持,它成为了攻击者利用漏洞的主要手段之一。...
单元测试的代码覆盖率统计是衡量测试用例好坏的一个方法,尤其是在多人合作的情况下,它可以在后期维护时候牵一发而动全身的代码修改中起到至关重要的检测作用。代码覆盖率统计可以从四个维度来衡量:行覆盖率、函数...
mocha 是一个简单、灵活有趣的 JavaScript 测试框架,用于 Node.js 和浏览器上的 JavaScript 应用测试。 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异步测试更简单更...
JavaScript密码强度检测JavaScript密码强度检测
单元测试的代码覆盖率统计 ...在单元测试中,代码覆盖率统计是一个重要的指标,可以帮助开发者检测到代码中的问题。然而,代码覆盖率统计不是唯一的标准,测试用例的好坏主要还是看能否覆盖尽可能多的情况。
javaScript检测图片大小,检测图片的大小,尺寸
系统首先通过协同训练方法对JavaScript代码进行特征分析,然后利用深度学习技术对恶意代码进行类别分类,最后通过Chrome浏览器扩展工具,实现了对网页代码的实时检测。 协同训练是一种有效的半监督学习方法,它通过...
Test'em 是一个 JavaScript 运行测试器,而且它让 JavaScript 的单元测试更方便更好玩,会让你爱上测试。 特性: 独立的测试框架,支持: Jasmine QUnit Mocha Buster.js 其他,需要通过自定义...
6. **覆盖率报告**:虽然 jsUnit 2.2 自身不直接提供代码覆盖率工具,但可以与其他工具(如 Istanbul)结合使用,以分析测试覆盖了代码的哪些部分,帮助开发者识别未被测试的代码。 为了更好地利用 jsUnit 2.2 进行...
Venus 是一个 JavaScript (JS)的测试工具,可以简化运行单元测试。当你在 JS 开发一个基于浏览器的项目时,你想创建单元测试并频繁地运行它们。通常,你会用一些库比如 Mocha 或 Jasmine,写一个单元测试,这些库...
UI5-工具的代码覆盖率检测器 中间件,支持代码覆盖。 这是的包装。 安装 npm install ui5-middleware-code-coverage --save-dev 配置选项(在$yourapp/ui5.yaml ) baseUri:将baseUri string传递给代理 用法 在$...
此外,Mocha还可以与其他工具如Babel(用于转换ES6+代码)和Sinon(用于模拟函数和对象)结合使用,提升测试覆盖率和效率。 总的来说,这个压缩包提供了一个了解和学习JavaScript测试的起点,特别是使用Mocha框架...