javascript单元测试框架jasmine入门

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作为测试框架的也越来越多,后续要需要加深研究。

Published by

Z.J.T

Product Designer from Wandou Labs

  • George Wing

    学习了,谢谢楼主的分享~

  • http://www.todotobe1.com 细胞vs宇宙

    虽然我是做Java后端。也顺便了解一下。同时也看过你的ajax整站渲染,受益了。

  • http://www.ijser.cn ijse

    很不错,, 挺喜欢jasmine的语法~~

    谢谢楼主分享~

  • http://www.yeetrack.com yeetrack

    不知道jasmine依附jsTestDriver运行,有没有比较好的报表展示?