I'm*_*Too 4 javascript mocking jestjs
我试图了解何时可以导入模拟,以及何时需要导入模拟并仍在jest.mock测试文件中使用。我正在查看来自 Jest 的 Github 的手动模拟示例。
一步模块模拟
在Lodash测试中,Lodash在目录中被mock__mocks__ ,使用标准模块导入createMockFromModule导出,并简单地导入并直接在测试中使用(无需额外mock)。
两步模拟
在同一个项目中,导出用户模型,并且有一个单独的用户模拟文件。但在用户模拟测试中,用户被导入,但还有一个额外的步骤使用jest.mock('../models/user');
我的问题/困惑
为什么 Lodash 测试不需要jest.mock测试文件中的附加内容,或者为什么用户测试需要它?在项目中,似乎我可以测试实际的和模拟的User 实现,但 Lodash 只会使用模拟的实现,即使两者都是createMockFromModule在__mocks__目录中创建/导出的。
区别在于,lodashNode 模块和user本地模块,后者需要使用jest.mock('../models/user')模拟。__mocks__
正如文档所述,
如果您正在模拟的模块是 Node 模块(例如:
lodash),则模拟应放置在__mocks__与 node_modules 相邻的目录中(除非您将根配置为指向项目根目录以外的文件夹),并且将自动模拟。无需显式调用jest.mock('module_name').
警告:如果我们想模拟 Node 的核心模块(例如:
fs或path),则jest.mock('path')需要显式调用eg,因为默认情况下不会模拟核心 Node 模块。
这可以避免 NPM 包的模拟与同名的本地模块之间发生意外冲突。