本篇文章可看作来自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的安装方式
安装包下载下来后进行初始化
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==true为true,正确
});
it("the second it", function() {
expect(true).toBe(false); //true==false为false,会报错
});
});
运行
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,我们会在后面章节探讨。
欢迎关注我的个人公众号:逍遥的心。主推程序员写的生活类文章,有兴趣的朋友可以共同探讨下: