javascript单元测试框架jasmine入门
by Z.J.T on 三月 26, 2011
jasmine是一个有名的javascript单元测试框架,它是独立的“行为驱动开发”(关于BDD请看:这里)框架,提供了对javascript开发者来说相对容易使用的测试语法,可以帮助你轻松写出自己的单元测试代码。
下面就简单介绍一下不需要部署应用环境的测试的例子。
jasmine在github上的wiki:https://github.com/pivotal/jasmine/wiki
其实上面这份文档里面已经有比较详细的介绍,我就对他给的官方demo进行解释,希望可以帮助对javascript单元测试不是很了解的同学快速入门。
下载jasmine的源码之后,可以看到目录有一个example的文件夹,这里就是我们要说的例子,还有一个文件夹lib,这里放了运行测试案例所必须的文件,其中jasmine.js就是整个框架的核心代码,jasmine-html.js用来展示测试结果,jasmine.css用来美化测试结果。
打开example目录,可以看到里面有两个文件夹,一个文件:
- spec包含了就是这个测试案例所有的测试规则
- src文件夹存放了我们需要测试的js文件对象
- SpecRunner.html就是我们运行测试用例的环境
首先如果是使用静态html来运行的话需要修改SpecRunner.html中的几个js路径为真正的js相对路径,比如:
需要改成
其他的几个文件类似。
我们再看spec文件夹下的几个文件,PlayerSpec.js就是针对src文件夹下的Player.js所写的测试用例。
关于测试用例中使用的语法有很多,一般来说每个规则描述对应一个js函数,但是实际上还要参考你自身js的设计,多个规则组合成为一个大的测试集合,对应成为我们想要测试的js对象。
//it用于描述一条简单的规则,其中第一个参数为实例的名称
//一般需要使用有实际判定式的有意义的语句来描述
//第二个参数为测试需要执行的代码
it('should increment a variable', function () {
var foo = 0;// set up the world
foo++;// call your application code
expect(foo).toEqual(1); // passes because foo == 1
});
//describe用于描述几个规则的集合,就是我们一般意义
//上的对象,第一个参一般使用对象名称,如下直接使用类名
//第二个参数为函数,里面集合了多个规则
//同时describe也可以嵌套规则,对于小规则和规则集合的限定
//需要自己去精心设计,这些规则的嵌套会在最终测试结果的展示上
//体现出差别。
describe('Calculator', function () {
it('can add a number', function () {
...
});
it('can multiply some numbers', function () {
...
});
});
了解完以上规则之后,我们就可以看懂PlayerSpec.js里面的每条规则的含义,其实还可以发现一个SpecHelper.js,他是用来添加自定义的检验规则的,框架本身提供的规则有诸如:toBe,toNotBe,toEqual,toNotEqual等规则,如果需要检验的规则比较复杂,你就可以额外添加自己的规则,添加法语法很简单:
beforeEach(function() {
this.addMatchers({
//这里就是自己定义的规则
toBePlaying: function(expectedSong) {
//运行校验代码,最终返回boolean值
var player = this.actual;
return player.currentlyPlayingSong === expectedSong &&
player.isPlaying;
}
});
});
最后就可以运行SpecRunner.html了,运行成功之后可以看到,每条规则的执行结果。
以上就是对jasmine的简单介绍,其实也就是拿他们的官方例子做个说明,最近看到已经有人利用jasmine开发出不有创意的测试规则,同时使用jasmine作为测试框架的也越来越多,后续要需要加深研究。
2 comments
学习了,谢谢楼主的分享~
by George Wing on 2011 年 04 月 12 日 at 5:19 下午. #
虽然我是做Java后端。也顺便了解一下。同时也看过你的ajax整站渲染,受益了。
by 细胞vs宇宙 on 2011 年 08 月 19 日 at 2:26 下午. #