美文网首页
JavaScript Unit Test框架——Jasmine快

JavaScript Unit Test框架——Jasmine快

作者: LiveMoment | 来源:发表于2017-01-18 17:15 被阅读131次

    核心概念:

    一、describe it expect 是什么?
    函数describe(string, function)表示一个测试集(Suite)
    函数it(string, function)表示一条测试用例(Spec)
    expect语句是一个断言(Expection),用来看实际执行结果和你期望结果是否相同,返回true和false。

    一个测试集包含多个测试用例;

    一条测试用例可以包含多个断言,只有当它的所有Expectations全为true时,这条用例才通过,否则失败。

    二、beforeEach,afterEach, beforeAll,afterAll 全局函数

    beforeEach():在describe函数中每个 it() 执行之前执行。
    afterEach(): 在describe函数中每个 it() 执行之后执行。
    beforeAll():在describe函数中所有的 it() 执行之前执行,但只执行一次,在 it() 之间并不会被执行。
    afterAll(): 在describe函数中所有的 it() 执行之后执行,但只执行一次,在 it() 之间并不会被执行。

    beforeAll 和 afterAll适用于执行比较耗时或者耗资源的一些共同的初始化和清理工作。而且在使用时还要注意,它们不会在每个Spec即 it()之间执行,所以不适用于每次执行前都需要干净环境的Spec。

    三、Matchers

    Matcher实现了断言的比较操作,将Expectation传入的实际值和Matcher传入的期望值比较。

    任何Matcher都能通过在expect调用Matcher前加上not来实现一个否定的断言(expect(a).not().toBe(false);)。

    常用的Matchers有:
    ——————————————————————————
    toBeDefined():检查变量或属性是否已声明且赋值。
    toBeUndefined()
    ——————————————————————————
    toBeNull():是否是null。
    ——————————————————————————
    toBeTruthy():如果转换为布尔值,是否为true。
    toBeFalsy()
    ——————————————————————————
    toBeLessThan():数值比较,小于。
    toBeGreaterThan():数值比较,大于。
    ——————————————————————————
    toBe():===
    toNotBe()
    ——————————————————————————
    toEqual():==,注意与toBe()的区别:
    一个新建的Object与另一个新建的Object,是Equal的,但不是toBe()的。
    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);
    });
    ——————————————————————————
    toMatch():按正则表达式匹配。
    toNotMatch()
    ——————————————————————————
    toThrow():检验一个函数是否会抛出一个错误
    ——————————————————————————
    toHaveBeenCalled() 函数是否被调用过
    toHaveBeenCalledWith() 检查传入参数是否被作为参数被调用过
    ——————————————————————————

    四、如何检查函数调用?—— Spy
    通过使用上面的:
    toHaveBeenCalled:检查function是否被调用过
    toHaveBeenCalledWith: 检查传入参数是否被作为参数调用过
    Spy能监测任何function的调用和方法参数的调用痕迹。
    具体例子可参考原文:
    http://www.cnblogs.com/zhcncn/p/4330112.html

    五、异步函数的怎么测?

    调用beforeEach,it 或者afterEach时,可以添加一个可选参数(Function类型,一般写为done)。当done函数被调用,表明异步操作的回调函数调用成功;否则如果没有调用done,表明异步操作的回调函数调用失败,则该Spec不会被调用,且会因为超时退出。
    Jasmine等待异步操作完成的默认时间是5s,如果5s内异步操作没有完成,则Spec会因为超时退出。

    六、其他特性
    1、jasmine.any:检测该参数是否与实际值所对应的构造函数相匹配,例如:
    expect({}).toEqual(jasmine.any(Object));
    expect(12).toEqual(jasmine.any(Number));

    2、jasmine.anything:检测实际值是否为null或undefined,如果不为null或undefined,则返回true,例如:
    expect(1).toEqual(jasmine.anything());

    3、jasmine.objectContaining: 检测实际Object值中是否存在特定key/value对

    4、jasmine.arrayContaining:用于检测实际Array值中是否存在特定值。

    参考:
    http://www.cnblogs.com/zhcncn/p/4330112.html

    相关文章

      网友评论

          本文标题:JavaScript Unit Test框架——Jasmine快

          本文链接:https://www.haomeiwen.com/subject/eyqbbttx.html