我试图理解什么时候我可以导入一个模拟和什么时候我需要导入模拟,并且仍然在测试文件中使用jest.mock。我在看来自Jest's Github的手动模拟示例。
一步模块模拟
在Lodash测试中,Lodash 被嘲弄在__mocks__目录中使用createMockFromModule导出,并简单地使用使用标准模块导入导入并直接在测试中使用 (没有附加的模拟)。
两步模拟
在同一个项目中,用户模型导出和单独的用户模拟文件都有。但是在用户模拟测试中,用户是导入的,但是还有一个使用jest.mock('../models/user');的附加步骤。
我的问题/困惑
为什么Lodash测试不需要测试文件中的附加jest.mock,或者为什么用户测试需要它?在这个项目中,我似乎可以测试实际的和模拟的用户实现,但是Lodash将只使用模拟的实现,即使两者都是使用createMockFromModule在__mocks__目录中创建/导出的。
发布于 2020-08-09 15:28:42
区别在于lodash是Node模块,user是本地模块,后者需要jest.mock('../models/user')才能使用来自__mocks__的模拟。
正如文献资料所说,
如果您要模拟的模块是节点模块(例如:
lodash),那么模拟应该放置在__mocks__目录中,与node_modules相邻(除非您配置根指向项目根目录以外的文件夹),并且将被自动模拟。没有必要显式调用jest.mock('module_name')。警告:如果我们想模拟Node的核心模块(例如:fs或path),那么就需要显式调用jest.mock('path'),因为核心节点模块在默认情况下不会被模拟。
这样可以避免NPM包的模拟和同名的本地模块之间的意外冲突。
https://stackoverflow.com/questions/63327443
复制相似问题