单元测试某些场景下只想模拟模块中的某个功能,并且保留模块原有的功能。这时候我可以用 jest.requireActual 配合 jest.mock 进行实现。
jest.requireActual
该API返回实际模块而不是模拟模块,绕过所有有关该模块是否应接收模拟实施的检查。为什么用 jest.requireActual
? 因为jest的mock中是不允许直接使用全局变量,所以我们无法直接import
模块包装实现。
例子
模拟Taro的login API
jest.mock('@tarojs/taro', () => {const login = jest.fn(async (): Promise<{ code: string; errMsg: string }> => {return Promise.resolve({ code: '122321121', errMsg: 'is:ok' })})return {...jest.requireActual('@tarojs/taro-h5'),login}
})