JavaScript测试框架Jasmine学习(一)

本篇文章可看作来自jasmine官网介绍的翻译

简介:

Jasmine是一个BDD(Behavior-driven development 行为驱动开发框架)开发框架,主要用来测试JavaScript代码,它不依赖于任何其他的JavaScript框架,也就是我們可以用它來作为js的单元测试框架,它不需要DOM,它有一个干净的,简单的语法让你可以轻松的编写测试。这篇文章我们是基于Jasmine 2.0.0来学习的。

Jasmine的安装

jasmine的安装方式有好几种。

For the Jasmine NPM module:
https://github.com/jasmine/jasmine-npm

For the Jasmine Ruby Gem:
https://github.com/jasmine/jasmine-gem

For the Jasmine Python Egg:
https://github.com/jasmine/jasmine-py

For the Jasmine headless browser gulp plugin:
https://github.com/jasmine/gulp-jasmine-browser

这里我使用的是npm的安装方式

从npm上下载安装包

安装包下载下来后进行初始化

jasmine init

在cmd中执行这句命令,没有报错基本就初始化成功了。

配置jasmine.json

我们可以下载jasmine的测试包,在cmd中输入

jasmine examples

有一个lib和spec文件夹会被下载到当前文件夹下。
想要使jasmine能够运行,我们还需要配置jasmine.json。

以下是个配置例子:

{
    "spec_dir":"spec",

    "spec_files":[
      "**/*[sS]pec.js"
    ],

    "helpers":[
        "helpers/**/*.js"
    ],

    stopSpecOnExpectationFailure:false,
    random:false

}

简单的配置结束了,这里有几个参数,大致讲下:

  • spec_dir:根目录(下面两个参数的前缀),下面的spec_files和helpers都是相对于spec_dir的。
  • spec_files: 测试文件所在位置,这里的”*/[sS]spec.js”表示在目录spec下面的所有后缀名为spec或Spec的js文件。
  • helpers: 存放正式js文件,就是我们测试的目标文件,spec_files就是用来测试helpers的,这里同样是相对路径(相对spec_dir)
  • stopSpecOnExpectationFailure:这个参数从字面意思上是“当一个spec出现异常时是否停止该spec”,实际上也就是这个意思,一个spec中可以有多个expect,true为停止,false为不停止。

Suites 测试集

Suite(注意单复数,谈到Jasmine里的概念,一般性会用到复数,我们单独介绍组件则用单数,下面的一些概念也是一样的)相当于java中一个类的概念,用describe 来申明,相当于java中class,是用来申明一个类的关键字。

describe在Jasmines中是全局的,他包含两个参数,测试名称和一个方法体,如:

describe('your test name',function(){

});

Specs 测试用例

Spec 相当于类中的方法。用it来申明,一个spec可以包含多个it如:

describe('your test name',function(){
    it("contains spec with an expectation", function() {
       expect(true).toBe(true);    //true==truetrue,正确
    });

    it("the second it", function() {
       expect(true).toBe(false);  //true==falsefalse,会报错
    });
});

运行

jasmine

结果如下:

Started
.F

Failures:
1) your test name the second it
  Message:
    Expected true to be false.
  Stack:
    Error: Expected true to be false.
        at Object.<anonymous> (C:\Users\Administrator\WebstormProjects\my-jasmine\spec\testSpec.js:10:22)

2 specs, 1 failure
Finished in 0.023 seconds

2个spec,一个失败了
具体的失败原因是:

your test name the second it
Message:
    Expected true to be false.

一个Suite(describe)可以包含多个Spec(it)。

Expectations 断言

expect 表示一个断言,断言只有两种结果——true和false,
一个Spec(it)可以包含多个Expectation(expect),如:

describe("A suite is just a function", function() {
  var a;

  it("and so is a spec", function() {
    a = true;

    expect(a).toBe(true);       // true==true ——> true
  });

  it("the second spec", function() {

    expect(1).toBe(2);          // 1==2 ——> false 
    expect(2).toBe(3);          // 2==3 ——> false
  });

});

前面提到过配置文件jasmine.json中的一个参数stopSpecOnExpectationFailure,
当我们设置为false时:

Started
.F

Failures:
1) A suite is just a function the second spec
  Message:
    Expected 1 to be 2.
  Stack:
    Error: Expected 1 to be 2.
        at Object.<anonymous> (C:\Users\Administrator\WebstormProjects\my-jasmine\spec\testSpec.js:12:19)
  Message:
    Expected 2 to be 3.
  Stack:
    Error: Expected 2 to be 3.
        at Object.<anonymous> (C:\Users\Administrator\WebstormProjects\my-jasmine\spec\testSpec.js:13:19)

2 specs, 1 failure
Finished in 0.012 seconds

我们可以看到有两条错误信息

当我们设置stopSpecOnExpectationFailure = true

Started
.F

Failures:
1) A suite is just a function the second spec
  Message:
    Expected 1 to be 2.
  Stack:
    Error: Expected 1 to be 2.
        at Object.<anonymous> (C:\Users\Administrator\WebstormProjects\my-jasmine\spec\testSpec.js:12:19)

2 specs, 1 failure
Finished in 0.011 seconds

现在只有一条错误信息了。

我们还可以单独测试一个js文件,只要在执行jasmine时传给他相对路径就可以了,如:

jasmine spec\testSpec.js

或者使用过滤filter ,是根据测试用例名过滤

jasmine --filter="a spec name"

注意这里的引号一定是双引号,单引号不起作用。

上面jasmine.json中我们还有一个参数没有讲——random,我们会在后面章节探讨。

欢迎关注我的个人公众号:逍遥的心。主推程序员写的生活类文章,有兴趣的朋友可以共同探讨下:这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值