我试图在Jest中围绕以下内容:resetAllMocks
,resetModules
,resetModuleRegistry
和restoreAllMocks
我发现很难。
我读过 Jest 文档,但不太清楚。如果有人可以为我提供上述工作方式的示例,并且它们彼此不同,我将不胜感激。
最佳答案
以下各节说明每个函数的行为及其相应的config伪指令。在config指令的情况下,解释的行为发生在每个测试之间,这使得它们与其他测试越来越孤立。
对fn
的引用意味着在这些操作中的每个操作下都有一个样本 Jest 模拟函数。jest.clearAllMocks()
和clearMocks:[boolean]
重置所有模拟使用情况数据,而不是其实现。换句话说,它仅替换了jest模拟函数的fn.mock.calls
和fn.mock.instances
属性。jest.resetAllMocks()
和resetMocks:[boolean]
clearAllMocks()
的超集,还负责将实现重置为no return
函数。换句话说,它将用一个新的jest.fn()
而不是其fn.mock.calls
和fn.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/