我有一些组件,这些组件带有第三方插件/库中的子组件。我将Jest用于单元测试和toMatchSnapshot()
方法。我试图用排除子组件,jest.unmock('ChildComponet.js')
但出现此错误:
调用了jest.unmock('ChildComponet.js'),但禁用了自动模拟功能。通过删除jest.unmock
对该测试不必要的调用或启用此测试的自动模拟功能jest.enableAutomock();
。该警告很可能是Jest 15中默认配置更改的结果。
我启用了jest.enableAutomock();
,现在出现错误:
TypeError:无法读取未定义的属性“ DEFINE_MANY”
我把它放在我的package.json上,但是什么也没发生:
“ unmockedModulePathPatterns”:[“ rootDir / node_modules / react”]
有任何想法吗?
React中对组件进行单元测试的正确方法是什么?
模拟到目前为止我发现的React组件的最简单方法是使用:
jest.mock('component', ()=> 'ComponentName')
在要测试的模块的import语句之前。
第一个参数可以是全局npm模块的名称,也可以是本地组件的路径(请注意,相对于测试文件的路径)。第二个参数只是一个返回字符串的函数(我总是返回我在jsx中使用的相同名称)。这将导致转储组件不执行任何操作,但其名称与原始组件相同。因此,在快照中您将看不到任何区别,除了模拟组件不会渲染任何子项。
现在到您收到的错误消息。
jest.unmock('ChildComponet.js')被调用但是自动模拟被禁用了...
问题是您使用jest.unmock
而不是jest.mock
。Jest具有自动模拟模块的所有依赖项的功能。启用自动模拟后,您可以用来jest.unmock
为lodash或moment之类的一些基本lib进行真正的植入。由于自动模拟功能使很多人感到困惑,因此他们决定将其设为可选。在Tldr中,您尝试取消对最初没有被模拟的内容的模拟,因为您未启用自动模拟。
TypeError:无法读取未定义的属性“ DEFINE_MANY”
启用自动模拟时,每个导入的模块都将替换为undefined
。关于unmockedModulePathPatterns
设置,我不能说太多,但我相信您必须使用与导入模块相同的模式,因此,如果它是全局的,则不必在其中放置node_modules
文件夹的路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句