不变式失败:您不应在<Router>

时间:2020-04-21 16:23:58

标签: reactjs react-redux jestjs enzyme react-router-dom

测试中出现错误:

不变式失败:您不应该在<Link>之外使用<Router>

对此我该怎么办?

      483 |     state,
      484 |   }) => { 
    > 485 |     const component = mount(<Testrun  {...props} />);
          |                       ^
      486 |     return component;
      487 |   };
      488 |   it('should have an input for the username', function () {

3 个答案:

答案 0 :(得分:2)

在实际项目中,您的<Testrun>嵌套在某些父级中,并且还包裹有一些父级,并且其中某些父级也有<BrowserRouter><HashRouter>。 它们提供<Link>所需的上下文(在这里是React的Context API)。

因此,您需要在测试中使用某些路由器版本。就像

const component = mount(<MemoryRouter><Testrun  {...props} /></MemoryRouter>);

您可以使用任何其他路由器,但是MemoryRouter由于易于配置和控制,因此在测试中特别有用。

答案 1 :(得分:-1)

您必须在Router的子代内部创建Link标记

答案 2 :(得分:-1)

必须有一个在组件外部应用的组件。因此,您遇到以下错误: 不变式失败:您不应在。

之外使用

将组件移到组件内部。