Skip to content

jest mock

jest 是一个Javascript测试框架, 用来测试前端 js 项目和 nodejs 项目.

安装 jest

bash
npm install -ED jest

clearAllMocks

说这个方法之前我们先看看 jest mock的数据存储, 当时我们使用 jest.spyOn(service, 'func').mockReturnValue('test') 去 mock 方法时,service.func 返回值是 test 同时会 增加 mock 字段到 func 上,即 service.func.mock, 所有的调用记录,上下文实例和返回都会被存储在 mock 字段上,如以下结构

js
//.mock
{
  calls: [],
  contexts: [],
  instances: [],
  invocationCallOrder: [],
  results: []
}

clearAllMocks正是针对这些记录来的, 它会清空 mock 字段成初始状态, 所有字段都会清空, 和方法调用了 mockClear() 效果相同, 同时配置文件中有 clearMocks 配置项,如果设置为 true,它的效果和 clearAllMocks 也是一样的。

js
// Automatically clear mock calls, instances, contexts and results before every test
clearMocks: true,

resetAllMocks

resetAllMocks 调用后除了会有 clearAllMocks 的所有功能外,还会重置掉 .mockReturnValue('test'), 把返回值处理成 undefined, 我目前还没有遇到需要使用这个方法的情况, 和方法调用了 mockReset() 效果相同.

和配置文件resetMocks 作用相同

js
// Automatically reset mock state before every test
resetMocks: true,

restoreAllMocks

restoreAllMocks 调用后除了会有 clearAllMocks 的所有功能外,还会重置 service.func 的模拟行为,即 service.func 不能被 expect 了, 恢复成原来的函数了, 和方法调用了 mockRestore() 效果相同

和配置文件restoreMocks 作用相同

js
// Automatically restore mock state and implementation before every test
restoreMocks: true,

So

js
// jest.clearAllMocks();    // 清除模拟函数的调用记录返回值等, 但是模拟函数的实现不会被清空
// jest.resetAllMocks();    // 清除模拟函数的调用记录返回值等, 同时模拟函数的实现也会被清空, 重置成 jest.fn()
// jest.restoreAllMocks();  // 清除模拟函数的调用记录返回值等, 同时模拟函数的实现也会被清空, 重置成原有函数