我试图在Jest中围绕以下内容:
resetAllMocksresetModulesresetModuleRegistryrestoreAllMocks
我发现很难。

我读过 Jest ​​文档,但不太清楚。如果有人可以为我提供上述工作方式的示例,并且它们彼此不同,我将不胜感激。

最佳答案

以下各节说明每个函数的行为及其相应的config伪指令。在config指令的情况下,解释的行为发生在每个测试之间,这使得它们与其他测试越来越孤立。

fn的引用意味着在这些操作中的每个操作下都有一个样本 Jest 模拟函数。
jest.clearAllMocks()clearMocks:[boolean]
重置所有模拟使用情况数据,而不是其实现。换句话说,它仅替换了jest模拟函数的fn.mock.callsfn.mock.instances属性。
jest.resetAllMocks()resetMocks:[boolean]clearAllMocks()的超集,还负责将实现重置为no return函数。换句话说,它将用一个新的jest.fn()而不是其fn.mock.callsfn.mock.instances替换模拟函数。
jest.restoreAllMocks()restoreMocks:[boolean]
resetAllMocks()相似,但有一个非常重要的区别。它恢复了“ spy ”的原始实现。因此,它就像“用jest.fn()替换模拟,但用其原始实现替换 spy ”一样。

因此,在我们使用jest.fn()手动分配事物(而不是 spy )的情况下,我们必须自己进行实现恢复,因为jest不会这样做。
jest.resetModules()resetModules:[boolean]
它将重置Jest的模块注册表,该注册表是所有必需/导入模块的缓存。对此调用之后,Jest将重新导入任何必需的模块。想象一个干净的状态,而不必处理其他测试中所有模拟出的模块。
jest.resetModuleRegistry
它只是resetModules的别名,请参阅:
https://github.com/facebook/jest/blob/7f69176c/packages/jest-runtime/src/index.ts#L1147

查看清除,重置和还原在操作上有何不同:
https://repl.it/@sepehr/jest-mock-api-reset-restore

关于javascript - Jest中的resetAllMocks,resetModules,resetModuleRegistry,restoreAllMocks之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58151010/

10-13 06:20