Javascript单元测试框架比较Qunit VS Jasmine
Javascript单元测试框架比较Qunit VS Jasmine
工欲行其事必先利其器,好的单元测试框架是TDD成功的一半。Javascript优秀的测试框架很多, 包括Jasmine,Qunit,JsTestDriver,JSUnit,Mocha等,当然你也可以写自己的单元测试框架,本文主角是Jasmine和Qunit。我之前一直用Qunit来做单元测试,Qunit在中国占有率是非常高的,我也不例外,而美国同事们已经用到Jasmine了,为了做一个更好的选型,决定对这两个框架做了一个小小的比较。
先看看作者对自己框架的描述:
Jörn Zaefferer( QUnit作者 ) : QUnit是一个JavaScript单元测试框架,主要用于在浏览器中运行单元测试。虽然这个项目从属于jQuery,但却不依赖于jQuery,也不依赖于浏览器DOM。因此你也可以在node.js或Rhino上使用。QUnit很容易学习,你只需在html页面中包含两个文件,不需要安装或者构建任何其他东西。最短的测试集只需要一个11行的html文件。
Davis Frank(Jasmine作者): Jasmine是一个 JavaScript测试框架,目的是将BDD风格引入JavaScript测试之中。至于区别嘛,我们的目标是BDD(相比标准的TDD),因此我们尽 力帮助开发人员编写比一般xUnit框架表达性更强,组织更好的代码。此外我们还力图减少依赖,这样你可以在node.js上使用Jasmine,也可以在浏览器或移动程序中使用。
1、Jasmine和Qunit报表比较
Qunit报表
Jasmine报表
从报表来看都非常精致,结果一目了然。Jasmine有子分组,而且分组很清晰,而Qunit可以在一个测试现在多个断言数。这是他们各自的优点,这块各有千秋。
2、Jasmine和Qunit的断言比较
Jamine,他有12种原生断言比较,同时我们可以很容易的定义自己的断言,这是一个很大的优点。
Qunit自带8种断言,当然你可以自己扩展,但相对比较麻烦,唯一优势是断言可以带自定义描述。
从断言比较这块来讲,Jasmine略带优势。
3、Jasmine和Qunit的分组(分模块)比较
Jasmine用describe()来进行分组和模块,它的优势是可以嵌套,也就是可以很好的区分子模块,非常明了使用的功能。
Qunit用module()进行分组,不能区分子木块。
从这块来函,Jasmine再下一城。
4、Jasmine和Qunit的测试比较
Jasmine只有it()一个用来操作测试的方法。
Qunit包含3个测试用的方法,这个比较多。多了异步测试的方法,而且expect()可以限制断言个数。
这块Qunit略丰富于Jasmine。
5、Jasmine和Qunit的异步控制
先看Jasmine的异步控制方法,很长,很麻烦,需要自己从新封装。
//其中player.openLibrary含异步调用
it('The music library should be opend', function() {
var flag; runs(function() {
flag = false;
player.openLibrary(function() {
flag = true;
});
});
waitsFor(function() {
return flag;
}, "aaaaaaa", 500);
runs(function() {
expect(player.library.openLibrary).toEqual(true);
});
});
再看Qunit的,很简单明了。
//其中player.openLibrary含异步调用
asyncTest('The music library should be opend', function() {
player.openLibrary(function() {
start();
ok(player.library != null, 'The "player.library" should be not null.');
ok(player.library.openLibrary === true, 'The music library should be opened');
});
});
//或则
test('The music library should be opend', function() {
stop();
player.openLibrary(function() {
start();
ok(player.library != null, 'The "player.library" should be not null.');
ok(player.library.openLibrary === true, 'The music library should be opened');
});
});
异步控制测试来看Qunit更清晰明了。
6、Mock Clock和Spies
这是两个Jasmine独有的东西,非常好。我也非常喜欢这两个功能Mock Clock能让你Mock一个时间间隔(这里我们可以精确的测试我们的代码执行时间),Spies可以用你知道函数的被调用次数和调用的方式,这是Jasmine优越的地方。
7、市场占用额:Jasmine51%,Qunit31%,这是去年12月份的统计数据。
8、 集成和配置:这块也是非常重要的,这里Qunit和Jasmine都是可以集成到Jenskin和VS2012的,也都可以用来测试RequireJs.
9、数据装载和卸载:这块也是Qunit和Jasmine都可以实现的功能非常有用。
有了这些比较,我承认我更喜欢Jasmine了,以后改用Jasmine做Javascript测试了。
Jasmine官网:http://pivotal.github.io/jasmine/
Qunit官网:http://qunitjs.com/
Javascript测试框架汇总:http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#JavaScript
下面附上我之前的比较表
Jasmine
|
Qunit
|
Result
|
|
---|---|---|---|
Assert |
expect(x).toEqual(y) expect(x).toBe(y) expect(x).toMatch(pattern) expect(x).toBeDefined() expect(x).toBeUndefined() expect(x).toBeNull() expect(x).toBeTruthy() expect(x).toBeFalsy() expect(x).toContain(y) expect(x).toBeLessThan(y) expect(x).toBeGreaterThan(y) expect(function(){fn();}).toThrow(e) We can write custom matchers when you want to assert a more specific sort of expectation.
|
deepEqual() equal() notDeepEqual() notEqual() notStrictEqual() ok() strictEqual() throws() |
Jasmine ≈ Qunit |
Grouping |
describe() |
module() Group related tests under a single label. |
Jasmine > Qunit |
Test |
it() It with two parameters: a string and a function. |
Qunit can display number of assertions in a test asyncTest() expect() test() |
Jasmine ≈ Qunit |
Asynchronous Control |
runs() waits() waitsFor() |
asyncTest() start() stop() |
Jasmine < Qunit |
Mock and Spies |
Providing mock and spies are good functions for unit test. |
\ | Jasmine > Qunit |
Market share | 45% | 31% | Jasmine > Qunit |
Test Report | Jasmine report | Qunit report | Jasmine ≈ Qunit |
Integrate VS | Y | Y | Jasmine ≈ Qunit |
Integrate CI | Y | Y | Jasmine ≈ Qunit |
Parameterized tests | \ | plugins qunit-parameterize | Jasmine < Qunit |
Configuration with RequireJs | Y | Y | Jasmine ≈ Qunit |
Setup and Teardown | Y | Y | Jasmine ≈ Qunit |
Javascript单元测试框架比较Qunit VS Jasmine的更多相关文章
- JavaScript单元测试框架-Jasmine
Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实 ...
- javascript单元测试框架mochajs详解
关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...
- javascript单元测试框架mochajs详解(转载)
章节目录 关于单元测试的想法 mocha单元测试框架简介 安装mocha 一个简单的例子 mocha支持的断言模块 同步代码测试 异步代码测试 promise代码测试 不建议使用箭头函数 钩子函数 钩 ...
- JavaScript单元测试框架JsUnit基本介绍和使用
JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个 ...
- JavaScript单元测试框架:Jasmine
摘抄:http://blog.csdn.net/GuoJiangweigege/article/details/52130589 互联网的快速发展,给web开发人员带来了前所未有的挑战.对于前端开发, ...
- JS单元测试框架:QUnit
QUnit:jQuery的单元测试框架,但不仅限于jQuery(从这个工具不需要引用jquery.js可以看出) index.html <!-- 官网 http://qunitjs.com/ - ...
- javascript单元测试(转)
1. 什么是单元测试 在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单 ...
- (译)学习如何构建自动化、跨浏览器的JavaScript单元测试
作者:Philip Walton 译者:Yeaseon 原文链接:点此查看 译文仅供个人学习,不用于任何形式商业目的,转载请注明原作者.文章来源.翻译作者及链接,版权归原文作者所有. ___ 我们都知 ...
- [转]javascript单元测试
1. 什么是单元测试 在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单 ...
随机推荐
- Linux中加入用户、删除用户时新手可能遇到的问题
Linux中加入用户.删除用户时新手可能遇到的问题 1.创建新用户后切换到新用户:No directory, logging in with HOME=/ 加入用户 #sudo us ...
- 几个常用的CSS3样式代码以及不兼容的解决办法
原文:几个常用的CSS3样式代码以及不兼容的解决办法 border-radius实现圆角效果 CSS3代码: -webkit-border-radius:10px; -moz-border-radiu ...
- Thrift实践
Thrift实践:(一)安装 -- 未完待续 1. 新建一个目录,C:\test\thrift-test,里面建2个子文件夹,client-node和sever-csharp,然后把Thrift官 ...
- 对于GetBuffer() 与 ReleaseBuffer() 的一些分析
先 转载一段别人的文章 CString类的这几个函数, 一直在用, 但总感觉理解的不够透彻, 不时还实用错的现象. 今天抽时间和Nico一起分析了一下, 算是拨开了云雾: GetBuffer和Rele ...
- Gulp前端构建工具
Gulp, 比Grunt更好用的前端构建工具 Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp ...
- 解决Postman发送post数据但是Node.js中req.body接收不到数据的问题[已解决]
之前编写后台接口,测试数据都是使用的Postman,相当的方便,之前也一直使用get方法,编写Node.js一直没有问题,但是由于要编写一个注册/登陆的功能,所以发送的post数据,后台的逻辑已经编写 ...
- win7 64位的apache2.4.9+php5.5+mysql5.6的安装
Win7 下64位的apache2.4.9+php5.5+mysql5.6.19的安装 1.首先下载文件 httpd-2.4.9-win64-VC11.zip(http://www.apachelou ...
- [置顶] EasyMock的简单使用
EasyMock总览 下面,我将讲述如何使用JUnit和EasyMock框架来进行单元测试. 在现实情况下,我们通常是在一些类里使用另外的一些类.在进行真正的测试之前,你可能需要做很多的工作,比喻说安 ...
- Js Date泣血整理
原文:Js Date泣血整理 JS Date 对象用于处理日期和时间. 创建 Date 对象的语法: var myDate=new Date() Date 对象会自动把当前日期和时间保存为其初始值. ...
- 解决easyui datagrid load时缓存问题
修改easyui datagrid内容保存后,使用$("#dg").datagrid("reload");或者$("#dg").datagr ...