繁体   English   中英

模拟与导入然后模拟

[英]Mock vs Import Then Mock

我试图了解什么时候可以只导入一个模拟,什么时候我需要导入模拟并且仍然在测试文件中使用jest.mock 我正在查看 Jest 的 Github 中的手动模拟示例

一步模块 Mocking

在 Lodash 测试中, Lodash__mocks__目录中使用createMockFromModule进行模拟,导出,并使用标准模块导入简单地导入并直接在测试中使用(无需额外的模拟)。

两步 Mocking

在同一个项目中, 用户 model 被导出,并且有一个单独的用户模拟文件 但是在User mocked test中, User 被导入但是还有一个额外的步骤使用jest.mock('../models/user');

我的问题/困惑

为什么 Lodash 测试不需要测试文件中的额外jest.mock ,或者为什么 User 测试需要它? 在项目中,我似乎可以测试实际和模拟用户实现,但Lodash将只使用__mocks__目录中的createMockFromModule创建/导出的。

不同之处在于lodash是 Node 模块,而user是本地模块,后者需要jest.mock('../models/user')才能使用来自__mocks__的模拟。

正如文件所述,

如果您的模块 mocking 是 Node 模块(例如: lodash ),则 mock 应放置在与 node_modules 相邻的__mocks__目录中(除非您将 root 配置为指向项目 root 以外的文件夹)并且将自动模拟。 无需显式调用jest.mock('module_name')

警告:如果我们想模拟 Node 的核心模块(例如: fspath ),则需要显式调用例如jest.mock('path') ,因为默认情况下不会模拟核心 Node 模块。

这可以避免 NPM 包的模拟与同名的本地模块之间的意外冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM