首页 > 解决方案 > 扩展 Jest 的“自动模拟”功能

问题描述

语境

Jest 的“自动模拟”功能非常有用。我不必为每个班级创建手写模拟,我可以这样做:

jest.mock('./src/MyObject')

...而且我有一个模拟对象,它具有所有正确的功能,都被模拟出来了。

请注意,我没有提到“自动模拟”功能,它甚至不需要您调用jest.mock(),而是将其提升到另一个级别,而是在您调用jest.mock()而不传递模拟工厂时发生的自动功能(即仅传递一个参数时) .

目标

我希望能够稍微自定义这种自动模拟行为,而不会失去上述所有魔力。对于上下文,我试图让 Jest 与第三方框架很好地配合,但这里有一些简化的要求:

我被困在哪里

我设法创建了一个函数,该函数使用jest.genMockFromModule()它调用这种自动模拟行为。然后我可以在我认为合适的时候修改这个模拟(例如 mocking 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语句也被提升了。

我觉得我真的很亲近。关于如何进行的任何建议?

标签: mockingjestjs

解决方案


推荐阅读