2016-10-14 67 views
0

我有一些组件与第三方插件/库的子组件。我使用Jest进行单元测试和toMatchSnapshot()方法。我试图排除jest.unmock('ChildComponet.js')子组件,我得到这个错误:React Jest匹配快照,崩溃时测试组件与子组件

jest.unmock('ChildComponet.js')被调用,但automocking被禁用。删除不必要的电话jest.unmock或通过jest.enableAutomock();为此测试启用自动锁定功能。这个警告可能是15

我启用jest.enableAutomock();现在我那朵错误开玩笑默认配置变化的结果:

类型错误:无法读取属性未定义

“DEFINE_MANY”我把这个在我的package.json但没有任何反应:

“unmockedModulePathPatterns”: “ROOTDIR/node_modules /反应”]

有什么建议吗?

是在React中对组件进行单元测试的正确方法吗?

回答

1

模拟出最简单的方式作出反应,我发现迄今使用的组件:

jest.mock('component',()=> 'ComponentName') 

你之前,你要测试的模块的导入语句。

第一个参数是全局npm模块的名称或本地组件的路径(请注意相对于您的测试文件的路径)。第二个参数只是一个返回字符串的函数(我总是返回我在jsx中使用的相同名称)。这将导致一个转储组件,它除了与原始组件相同的名称外什么都不做。所以在你的快照中你不会看到任何区别,除了被嘲弄的组件不会渲染任何孩子。

现在来看你得到的错误消息。

jest.unmock('ChildComponet.js') was called but automocking is disabled...

的问题是,你使用jest.unmock,而不是jest.mock。 Jest具有自动模拟所有模块的依赖关系的功能。启用自动模拟功能后,您可以使用jest.unmock来获取真正的植入体例,如lodash或时刻。由于汽车模拟功能让很多人感到困惑,他们决定让它成为可选项。 Tldr你试图去嘲弄一些没有被嘲笑的东西,因为你没有启用自动嘲讽。

TypeError: Cannot read property 'DEFINE_MANY' of undefined

当您启用自动模拟时,每个导入的模块将被替换为undefined。我不能说太多的unmockedModulePathPatterns设置,但我相信你必须使用相同的模式来导入模块,所以如果它是一个全球性的,你不必把它的路径node_modules文件夹。

+0

非常感谢。我测试它。 –