reactjs - enzyme `mount` 不呈现 `Route` 元素

标签 reactjs enzyme

我有这个简化的 render()方法:

render() {
    return (
        <React.Fragment>
            <Router>
                <div>
                    <Route path='/abc' component={Test} />
                    <Route path='/def' render={() => (
                        <div>Hello</div>
                    )} />
                </div>
            </Router>
        </React.Fragment>
    )
}

这个 enzyme 测试:

test('Render <Test> on /abc', () => {
    const wrapper = mount(
        <MemoryRouter initialEntries={['/abc']} >
            <App />
        </MemoryRouter>
    );
    console.log(wrapper.debug());
    expect(wrapper.find(Test)).to.have.lengthOf(1);
});

然而,mount()未呈现任何一个组件 Test/abc路线,或 <div>Hello</div>/def路线。

来自 console.log(wrapper.debug()); 的输出:

  <MemoryRouter initialEntries={{...}}>
    <Router history={{...}}>
      <App>
        <BrowserRouter>
          <Router history={{...}}>
            <div>
              <Route path="/abc" component={[Function: Test]} />
              <Route path="/def" render={[Function: render]} />
            </div>
          </Router>
        </BrowserRouter>
      </App>
    </Router>
  </MemoryRouter>

我如何测试该应用程序是否会实际呈现 Test /abc 上的组件路线?

最佳答案

我已经设法通过模拟路由器找到解决方案:

import React from 'react';
const reactRouterDom = require('react-router-dom');

// Render plain div with children
reactRouterDom.BrowserRouter = ({children}) => <div>{children}</div>
module.exports = reactRouterDom;

关于reactjs - enzyme `mount` 不呈现 `Route` 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061412/

相关文章:

javascript - 滚动时如何阻止 Material ui 表行中的按钮溢出?

javascript - 在 React 应用程序中处理复选框

javascript - 调用函数作为 Enzyme 中的 prop 传递

javascript - 使用jest+enzyme测试,mock函数无故调用两次

reactjs - 使用 Component.WrappedComponent 作为 withRouter 的替代品测试组件在运行测试用例时显示警告

react-native - 升级到 React-Native 0.58 后,Jest 测试中断

reactjs - 在 Jest 中检查我的组件上是否存在可选 Prop

javascript - 如何根据第一次响应进行第二次 API 调用?

Javascript 读取文件

node.js - ReactJS + Socket.IO - 处理套接字连接的最佳方式