11|通过对类的Mock理解单元测试和集成测试

2020-05-24  本文已影响0人  雪燃归来

一、单元测试

(一)、单元测试的思考

      单元测试的重点是:只对当前单元里的代码做测试,里边引入的外部文件并不关心,如果外部的代码引入造成了性能损耗,我们就是使用更简单的东西代替它,让我们的单元测试执行起来更快、更顺畅。所以在单元测试中我们就可以使用各种各样的mock实现我们的测试。

(二)、代码部分

1、创建测试工具类 util.js

class Util {
    a(){
        // .....很复杂的逻辑代码
    }
    b(){
        // .....很复杂的逻辑代码
    }
}

export default Util;

2、创建测试工具类的测试实例 util.test.js

import Util from './util'
test('测试Util类的a方法', () => {
    //expect(Util.a()).toBe()
})
test('测试Util类的b方法', () => {
    //expect(Util.b()).toBe()
})

3、Util作为外部资源时,做单元测试(demo.js)

import Util from './util'
const demoFunction = (a, b) => {
    const util = new Util();
    util.a(a);
    util.b(b)
}
export default demoFunction;

4、对demo.test.js

jest.mock('./util')
// jest.mock发现util是一个类,会自动把类的构造函数和方法变成 jest.fn()
// const Util = jest.fn()
// Util.a = jest.fn()
// Util.b = jest.fn()
import Util from './util'
import demoFunction from './demo'
test('测试 demoFunction', () => {
    demoFunction();
    expect(Util).toHaveBeenCalled();
    expect(Util.mock.instances[0].a).toHaveBeenCalled()
    expect(Util.mock.instances[0].b).toHaveBeenCalled()
})

三、使用mocks自定义单元测试

mocks/util.js

const Util = jest.fn(() => {
    console.log('constructor --')
})
Util.prototype.a = jest.fn(() => {
    console.log('function a --')
})
Util.prototype.b = jest.fn(() => {
    console.log('function b --')
})

export default Util;
上一篇 下一篇

猜你喜欢

热点阅读