上下文
Jest的“自动模拟”功能非常有用。我不必为每个类都创建手写模拟,我可以这样做:
jest.mock('./src/MyObject')
...并且我有一个模拟对象,该对象具有所有正确的功能,都被模拟了。
请注意,我没有提到“自动模拟”功能,该功能甚至不需要您调用jest.mock()
,而是通过调用jest.mock()
时出现的自动功能将其提升到另一个层次。而不传递模拟工厂(即,仅传递一个参数时)。
目标
我希望能够略微自定义此自动嘲笑行为,而又不会失去所有上述魔力。对于上下文,我正在尝试使Jest与第三方框架很好地兼容,但这是一些简化的要求:
jest.mock()
,仍然导入
类正常,等等。测试编写者忽略了
定制。 awesomeFunction()
的函数,我希望将其自动模拟以返回字符串“ awesome”。 (人为警告示例!)我被困在哪里
我设法创建了一个使用jest.genMockFromModule()
的函数,该函数调用此自动模拟行为。然后,我可以根据需要修改此模拟(例如模拟awesomeFunction()
)。最后,我可以使用jest.setMock()
注册该模拟游戏。
我现在可以在我的测试代码中使用此功能(我们将其称为mockAwesomely()
)
import MyModule from './src/MyModule'
mockAwesomely('./src/MyModule') // used to be jest.mock('./src/MyModule')
问题在于,使用此代码,导入的MyModule
不是模拟模块。这是真实的MyModule
。经过一番调查,我相信这是因为mockAwesomely()
并没有像jest.mock()
那样被提升到文件的顶部。甚至手动将其放在文件顶部似乎也不起作用,因为import
语句也被提升。
我觉得我真的很近。有关如何进行的任何建议?