AngulaJs自动化测试之Karma和Jasmine

一、入门简介

Karma和Jasmine的基本了解,参考另外一篇文章Angularjs官方示例项目之单元测试套件karma-jasmine


二、Karma配置

TBD


三、Jasmine

Jasmine的官方文档参考:Jasmine Behavior-Driven JavaScript Documentation 上面有很一个很详细的测试示例。

套件细则spec

Jasmine的核心套件是describe()函数,它是一个全局函数,可以在测试时被全局调用。

describe(specName, function(){})函数有两个参数,分别是细则spec套件的名字和测试套件的函数。describe()是可以嵌套的,也就是说可以在一个describe()的第二个参数函数中,再定义个describe()。

通过调用it()全局函数来在describe()中定义一个细则spec。

describe('A spec suite', functoin(){
    it('constains a equal spec', {
        expect(true).toBe(ture);
    });
});

一个describe()中可以有多个细则spec,同时,一个spec细则中也可以有多个预期expect断言项。但是,只有一个细则中所以的断言项目都通过,才算是通过一个细则spec。


设置函数beforeEach和afterEach

beforeEach(functon) 传入的参数是一个函数,该函数会在每个细则describe运行之前被调用。

同理,afterEach(function)则是在每个细则describe运作之后被调用。


预期与匹配器(断言库)

测试时,我们是想要知道某个断言条件下应用是符合我们的预期expect的。比如:“如果我们点击了这个按钮,我们会期望有什么结果。”在jasmine中,使用expect(needTestedValue)函数来创建这个预期,其参数表示我们真实的需要被测试的值。

相应的,有需要测试的值,就有我们期待的值。这个期待值就保存在匹配器macher,比如内置的toBe(expectedValue)中。

最后的语法类似与

expect(needTestedValue).macher(expectValue)

一个代码示例如下:

describe('A spec suite', functoin(){
    it('constains a equal spec', {
        expect(true).toBe(ture);
    });
    
    // you can use 'not'
     it('constains a  not equal spec', {
        expect(true).not.toBe(false);
    });   
});


内置的匹配器有:

//比较x和y是否值相等,相当于==
expect(x).toEqual(y);

//比较x和y是否不相等
expect(x).not.toEqual(y);

//比较x和y是否是相同的对象,相当于JavaScript中的"==="
expect(x).toBe(y);

//比较x是否匹配pattern正则
expect(x).toMatch(pattern);

//x是否为undefined
expect(x).toBeDefined();

//x是否为null
expect(x).toBeNull();

//x是否为true
expect(x).toBeTruthy();

//x是否为false
expect(x).toBeFalsy();

//y是在数组x中(x可以是字符串或数组)
expect(x).toContain(y);

//x是否比y小
expect(x).toBeLessThan(y);

//x是否比y大
expect(x).toBeGreaterThan(y);

//x是否在一个指定的浮点精度内与y相近
expect(x).toBeCloseTo(y);

//函数是否抛出异常
expect(fn).toThrow(e);

自定义匹配器

自定义方法是在Jasmine块中调用addMachers()函数

describe('A spec suite', functoin(){
    tihs.addMachers({
        customerMacher: function(expected) {
            // customer rule
            return this.actual <= expected;
        }
    });
});

这样就可以在测试套件中使用自定义的  customerMacher 匹配器了。


你可能感兴趣的:(AngulaJs自动化测试之Karma和Jasmine)