[英]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 的核心模块(例如:
fs
或path
),则需要显式调用例如jest.mock('path')
,因为默认情况下不会模拟核心 Node 模块。
这可以避免 NPM 包的模拟与同名的本地模块之间的意外冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.