转自玉伯的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 代码的覆盖率,让开发者简单方便地了解自己代码的单元测试覆盖度。 ...
"JsTracker"是一款专门针对页面代码覆盖率检测的工具,它原先是FeHelper项目的一部分,现在已独立出来,成为一个单独的工具,便于更专业地进行JavaScript代码测试。 FeHelper是一款深受前端开发者喜爱的浏览器扩展...
它与其他 JavaScript 覆盖率工具的区别在于它可以轻松地在任何浏览器(支持 JavaScript)中运行,从而允许对包括 DOM 交互的测试进行覆盖率测量。它可以与大多数工具一起运行(例如 Jasmine、 QUnit、 Mocha等...)...
istanbul 是一个 JavaScript 的代码覆盖率检查工具。 特性: 可检查包括语句、分支和函数覆盖,以及反向工程的代码行覆盖 模块加载钩子 可随时跟踪代码 命令行工具 可运行带覆盖率检查的 node 单元测试,不需要...
- **istanbul/nyc**:代码覆盖率工具,显示哪些代码被测试覆盖,哪些部分可能需要更多的测试。 测试环境搭建通常会涉及配置`package.json`文件,安装测试框架及相关依赖,并创建测试文件。测试文件通常以`.spec.js`...
2. **插件化**:Karma拥有丰富的插件生态系统,支持Mocha、Jasmine、Chai等多种测试框架,以及代码覆盖率工具、代码格式化工具等,可以根据项目需求灵活配置。 3. **实时重载**:在开发过程中,Karma可以自动检测...
一个少于 200 行代码的 JavaScript 测试工具,适用于 NodeJS 和浏览器。特性零配置没有全局,只是一个提供两个方法 api 的函数异步测试并行性快速对浏览器友好 标签:Zora
sIEve是一款专门针对JavaScript内存泄漏检测的工具,版本为0.0.8。这款工具的主要目标是帮助开发者识别和定位JavaScript应用中的内存泄漏问题,以优化性能并提高用户体验。sIEve通过深入分析JavaScript运行时的内存...
为了使用JSEditor插件,首先需要下载压缩包"Eclipse的JavaScript插件 JSEditor.7z",然后解压并按照Eclipse的扩展机制进行安装。通常,这涉及打开Eclipse的“帮助”菜单,选择“安装新软件”,然后指向解压后的插件...
### 利用文档工具检测PDF中的恶意Javascript #### 摘要 自2008年起,PDF文档作为恶意软件传播的一种新兴媒介逐渐受到广泛关注。由于PDF格式的普及及其对JavaScript的支持,它成为了攻击者利用漏洞的主要手段之一。...
基于JavaScript开发的心率检测小程序源码(课程设计).zip基于JavaScript开发的心率检测小程序源码(课程设计).zip基于JavaScript开发的心率检测小程序源码(课程设计).zip基于JavaScript开发的心率检测小程序源码(课程...
stool 是一个 JavaScript 基准测试工具。优势:无需登录/姓名和电子邮件/验证码"always" up只使用静态的资源,所以可以本地和脱机工作(仅限打开HTML文件) 标签:stool
5. **覆盖率报告**:Sazerac可能集成Istanbul等覆盖率工具,帮助开发者了解代码覆盖情况。 6. **测试套件组织**:可以按照模块或功能组织测试,提高代码可读性和可维护性。 ### 使用Sazerac进行单元测试 要开始...
Enzyme是一个流行的JavaScript测试工具,专门设计用于React应用的单元测试和组件测试。它提供了一种简单的方式来交互和检查React组件,使得测试过程更直观和高效。Enzyme支持多种测试框架,如Jest和Mocha,可以方便...
6. **覆盖率报告**:虽然 jsUnit 2.2 自身不直接提供代码覆盖率工具,但可以与其他工具(如 Istanbul)结合使用,以分析测试覆盖了代码的哪些部分,帮助开发者识别未被测试的代码。 为了更好地利用 jsUnit 2.2 进行...
JavaScript检测是否开启了控制台(调试工具) 测试后在chrome有效 不少人防止别人趴源码,一般采用检测按键F12之类的,但是这些基本没什么用 现在介绍一个方法,非常管用,可以检测到你是否开启了控制台程序,可以...
Venus 是一个 JavaScript (JS)的测试工具,可以简化运行单元测试。当你在 JS 开发一个基于浏览器的项目时,你想创建单元测试并频繁地运行它们。通常,你会用一些库比如 Mocha 或 Jasmine,写一个单元测试,这些库...
此外,Mocha还可以与其他工具如Babel(用于转换ES6+代码)和Sinon(用于模拟函数和对象)结合使用,提升测试覆盖率和效率。 总的来说,这个压缩包提供了一个了解和学习JavaScript测试的起点,特别是使用Mocha框架...
这个阶段测试机试题旨在覆盖以上各个知识点,通过解答这些题目,学习者可以自我检测对JavaScript语言的理解程度,找出不足之处,进一步巩固和提升编程技能。记住,实践是检验真理的唯一标准,不断练习和解决问题才能...