我想了解什么时候我可以只导入一个模拟与何时需要导入该模拟并仍在jest.mock
测试文件中使用。我正在看Jest's Github上的手动操作示例。
一步模块模拟
在Lodash测试,Lodash被嘲笑在__mocks__
目录使用createMockFromModule
,导出和简单地使用标准的模块进口导入,并直接在测试中使用(没有额外嘲笑)。
两步模拟
在同一项目中,将导出User模型,并且有一个单独的User模拟文件。但是在用户模拟测试中,导入了用户,但是使用了另一个步骤jest.mock('../models/user');
我的问题/困惑
为什么Lodash测试不需要jest.mock
测试文件中的其他内容,或者为什么User测试需要它?在项目中,好像我可以测试实际和嘲笑用户执行,但Lodash只会用嘲笑的实现,使用即使两者在创建/导出createMockFromModule
的__mocks__
目录。
区别在于lodash
Node模块和user
Local模块,后者jest.mock('../models/user')
是为了使用模拟__mocks__
而需要的。
如文档所述,
如果您要
lodash
模拟的模块是Node模块(例如__mocks__
:),则模拟应放置在与node_modules相邻的目录中(除非您将根配置为指向项目根目录以外的文件夹),并且将被自动模拟。无需显式调用jest.mock('module_name')
。
警告:如果我们要模拟Node的核心模块(例如:
fs
或path
),则需要显式调用egjest.mock('path')
,因为默认情况下不模拟核心Node模块。
这样可以避免NPM软件包的模拟与同名的本地模块之间的意外冲突。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句