Appearance
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(); // 清除模拟函数的调用记录返回值等, 同时模拟函数的实现也会被清空, 重置成原有函数