单元测试某些场景下只想模拟模块中的某个功能,并且保留模块原有的功能。这时候我可以用 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
  }
})
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐