Jasmine单元测试框架运用基础引见

背景

近来担任一个需求,运用到了jasmine测试框架做单元测试

引见

Jasmine就是一种JavaScript单元测试框架,它不依靠任何其他JS框架,也不需要对DOM操纵,具有灵活而明白的语法能够让你轻松的编写测试代码。它是一套Javascript行动驱动开辟框架(BDD),清洁简约,表达力强且易于组织,不依靠于其他任何框架和DOM,可运转于Node.js,浏览器端或挪动端。
Jasmine官网
Jasmine github

Jasmine的基本语法

  • Suites
    Suites能够明白为一组测试,运用全局的Jasmin函数describe 建立。describe 函数接收两个参数,一个字符串和一个函数。字符串是这个Suites的名字或题目(一般形貌下测试内容),函数是完成Suites的代码块。

  • Specs
    Specs能够明白为一个测试,运用全局的Jasmin函数it 建立。和describe 一样接收两个参数,一个字符串和一个函数,函数就是要实行的测试,字符串就是测试的名字。一个Spec能够包括多个expectations来测试代码。在Jasmine中,一个expectations就是一个断言,只能是true 或false 。只需悉数expectations是true 的时刻spec才会经由过程。

    因为describe 和it 块实质上都函数,一切他能够包括任何的可实行代码。javascript的作用域划定规矩也是实用的,所以describe 内定义的变量,其内部一切的it 都能访问到。
    
  • Expectations
    expectations由expect 函数建立。接收一个参数。和Matcher一同联用,设置测试的预期值。

Matchers

在Jasmine中,每一个Matcher完成一个“期望值”和“现实值”的布尔推断,Jasmine会依据Mather推断expectation是true 照样false ,然后决议spec是测试经由过程照样失利。一切Matcher能够经由过程not 实行否认推断。

  • 基本matchers

    toBe():相当于===比较。

    toNotBe()

    toBeDefined():搜检变量或属性是不是已声明且赋值。

    toBeUndefined()

    toBeNull():是不是是null。

    toBeTruthy():布尔测试,推断值是不是是,或许能够转换为true。

    toBeFalsy()

    toBeLessThan():数值比较,小于。

    toBeGreaterThan():数值比较,大于。

    toEqual():相当于==,注重与toBe()的区分。

    一个新建的Object不是(not to be)另一个新建的Object,然则它们是相称(to equal)的。

    expect({}).not().toBe({});
    expect({}).toEqual({});

    toNotEqual()

    toContain():数组中是不是包括元素(值)。只能用于数组,不能用于对象。

    toBeCloseTo():是比较两个值是不是充足靠近(不一定要相称)。

    it("The 'toBeCloseTo' matcher is for precision math comparison", function() {
        var pi = 3.1415926,
          e = 2.78;
    expect(pi).not.toBeCloseTo(e, 2);
    expect(pi).toBeCloseTo(e, 0);
    });

    看源码明白用法

    getJasmineRequireObj().toBeCloseTo = function () {
    
        function toBeCloseTo() {
            return {
                compare: function (actual, expected, precision) {
                    if (precision !== 0) {
                        precision = precision || 2;
                    }
    
                    return {
                        pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2)
                    };
                }
            };
        }
    
        return toBeCloseTo;
    };

    比方第二个expect就是假如pi-e的绝对值小于10的-0次方除以2的值,断言经由过程

    toMatch():按正则表达式婚配。

    toNotMatch()

    toThrow():磨练一个函数是不是会抛出一个毛病

    it("toThrow推断一个函数是不是有抛出非常", function() {
        var foo = function() {
            return 1 + 2;
        };
        var bar = function() {
            return a + 1; //a不存在
        };
    
        expect(foo).not.toThrow();
        expect(bar).toThrow();
    });
  • 其他matchers

    jasmine.any(Class)
    传入组织函数或许类返回数据类型作为期望值,返回true示意现实值和期望值数据类型雷同:

    it("matches any value", function() {  
        expect({}).toEqual(jasmine.any(Object));
        expect(12).toEqual(jasmine.any(Number));
    });

    jasmine.anything()
    假如现实值不是null或许undefined则返回true:

    it("matches anything", function() {  
        expect(1).toEqual(jasmine.anything());
    });

    jasmine.objectContaining({key:value})
    现实对象只需婚配到有对应的键/值就算婚配经由过程:

    foo = {  
          a: 1,
          b: 2,
          bar: "baz"
    };
    expect(foo).toEqual(jasmine.objectContaining({bar: "baz"})); 

    jasmine.arrayContaining([val1,val2,...])
    现实数组只需婚配到有包括的数值就算婚配经由过程:

    foo = [1, 2, 3, 4];  
    expect(foo).toEqual(jasmine.arrayContaining([3, 1]));  

    jasmine.stringContaining(str)
    stringContaining能够婚配字符串的一部分也能够婚配对象内的字符串:

    expect({foo: 'bar'}).toEqual({foo: jasmine.stringMatching(/^bar$/)});  
    expect('foobarbaz').toEqual({foo: jasmine.stringMatching('bar')}); 

Setup and Teardown

为了在庞杂的测试用例中越发便于组装和拆开,Jasmine供应了四个函数:

beforeEach(function) //在每一个测试用例(it)实行之前都实行一遍beforeEach函数;
afterEach(function) //在每一个测试用例(it)实行完成以后都实行一遍afterEach函数;
beforeAll(function) //在一切测试用例实行之前实行一遍beforeAll函数;
afterAll(function) //在一切测试用例实行完成以后实行一遍afterAll函数;

jasmine另有自定义matcher的功用和一些高等功用,临时没有用到,有时机进修下

参考资料

JavaScript单元测试框架——Jasmine入门
JavaScript 单元测试框架:Jasmine 初探

    原文作者:jasminecjc
    原文地址: https://segmentfault.com/a/1190000005954868
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞