jasmine是js的一个测试框架,本文就主要讲解最简单的jasmine。首先先来一个最简单的测试用例:
describe("calculate", function() {
it("should be able to return the sum", function() {
expect(calculate.count(2,3).toEqual(5);
});
首先呢,jasmine测试框架是以describe开头,接受两个参数,一个是字符串,一个是函数。字符串是用来描述你正在测试的内容(这里就是要测试的是calculate类,下面有很多的方法,我这里只测试了计算两个数的和),函数就是你要测试的代码函数,里面的it函数也是接受两个参数,一个是字符串,一个是函数,字符串也是用来描述这个测试案例具体正在测试的功能,expect就是期望值,当这个期望值为真的时候,测试就算是通过了。
expect里面提供了很多种方法,例如这里的toEqual就是判断两个对象是否相等,还有toBe , toBeDefined等等很多方法。再看一个简单的测试用例:
describe("示例", function() {
var a;
beforeEach(function() {
a = 0;
a += 1;
});
afterEach(function(){
a = 0;
});
it("测试", function() {
expect(a).toEqual(1);
});
});
jasmine还提供了beforeEach和afterEach函数,按照字面上的意思来说,beforeEach是在describe里面的所有小测试(也就是it)之前执行(比如说你要在后面很多个的it里面都使用到某一个变量或者其他,就可以在beforeEach里面写),而afterEach显然是所有测试之后执行(测试完了需要干什么,就可以写在afterEach里面)。当然了,这两个函数不一定必须。再看一个简单的测试用例:
describe("guess_number",function(){
var answer;
var game;
beforeEach(function () {
answer = new AnswerGenerator();
spyOn(answer,'generate_random_number').and.returnValue('1234');
game = new Guess(answer);
});
it("guess right should be able to return 4A0B!", function () {
expect(game.guess_answer('1234')).toEqual(true);
});
}
);
这个是测试一个game类,用来判断输入的数字与随机生成的数字是否相等。
看到spyOn了吗?,这也是jasmine里面的,我在学习这个的时候师兄们告诉我说的是这个可以使得你的函数是可控的,比如这里的随机数的生成,返回值是不可控的,就可以通过spyOn使得返回值可控。(白话文说就是assume某个变量或者函数是可控的),相应的有针对spy这个的测试的两个函数,toHaveBeenCalled用来测试你spy这个函数是否被调用了,toHaveBeenCalledWith用来测试调用时的参数,匹配的话返回true。例如:
expect(answer.generate_random_numbe).toHaveBeenCalled();
用来测试generate_random_number这个函数是否被调用了。
小节:jasmine写测试的时候只要记住describe(分组),it(单个用例),expect(期望),什么匹配函数什么的,首先是写decrible然后在里面写it,expect 里面还可以嵌套describe,测试主要是为了查看我们的代码有没有按照我们需要的那样去执行。