我在组件内部有链接。我已经在app.js中指定了路由路径。
当我尝试使用Swallow和Mount在组件内部找到 Link 控件时,会引发错误。
任何人都可以共享该示例以在组件内部找到链接按钮 代码
it('includes link to Next Exam', () => {
const home = shallow(
<StaticRouter>
<ComponentForm/>
</StaticRouter>,
);
expect(home.find(Link)).toHaveLength(1);
});
答案 0 :(得分:1)
Enzyme shallow
专门用于无法测试要传递的组件的子代。由于StaticRouter
是父组件,因此ComponentForm
永远不会得到正确的渲染,因此Link
永远不会出现在视图中。因此,使用shallow
可以测试StaticRouter
是否正确渲染了ComponentForm
,但是您无法查看ComponentForm
的内部。
您有两个选择:
首先,您可以将ComponentForm
传递给shallow
方法。您在评论中提到这导致事情中断。这可能是因为ComponentForm
期望StaticRouter
提供道具。您可以手动传递这些信息:
shallow(<ComponentForm routerProp1={'foo'} routerProp2={'bar'} />);
您的另一选择是使用Enzyme render
进行深度渲染。只需将shallow
替换为render
就可以了。请注意,出于多种原因不建议这样做。首先,如shallow
所述,通过不执行shallow
渲染,您可以允许自己测试所传入组件不了解的内容。例如,StaticRouter
不了解ComponentForm
的{{1}},因此对Link
的{{1}}的测试应独立于{{1} }。其次,ComponentForm
比Link
慢得多,因此,如果您有大量的测试和大量的组件,则会发现速度明显下降。