jest酶路由如何用Route测试组件?

时间:2018-01-17 09:52:19

标签: jestjs enzyme react-router-v4

我有一个App组件,其中包含主要路径定义:

export default function App() {
  return (
    <div>
      <MuiThemeProvider theme={createMuiTheme(theme)}>
        <Route
          path={`${URL_PREFIX}/:module?/:id?`}
          render={() => (<div>
            <MapContainer />
            <NavigationBox />
            <FeedbackMessage />
          </div>)}
        />
        <Switch>
          <Route
            exact
            path={URL_PREFIX}
            render={() => (
              <Redirect to={`${URL_PREFIX}/restaurants`} />
            )}
          />
        </Switch>
      </MuiThemeProvider>
    </div>
  );
}

我有主文件,我有渲染功能,它在正确的HTML节点上呈现App并将所有内容包装在其中:

const render = (messages) => {
  ReactDOM.render(
    <Provider store={store}>
      <LanguageProvider messages={messages}>
        <ConnectedRouter history={history}>
          <App />
        </ConnectedRouter>
      </LanguageProvider>
    </Provider>,
    MOUNT_NODE
  );
};

到目前为止一切正常。

我也尝试为App编写测试,但这部分根本不起作用。这是我的测试文件:

describe('<App />', () => {
  describe('should render other components on proper route', () => {
    let renderedComponent;

    beforeEach(() => {
      renderedComponent = shallow(
        <MemoryRouter initialEntries={[URL_PREFIX]} initialIndex={0}><App /></MemoryRouter>
      ).dive().dive();
    });

    it('should render <MapContainer />', () => {
      expect(renderedComponent.find(MapContainer).length).toBe(1);
    });
    it('should render <NavigationBox />', () => {
      expect(renderedComponent.find(NavigationBox).length).toBe(1);
    });
    it('should render <FeedbackMessage />', () => {
      expect(renderedComponent.find(FeedbackMessage).length).toBe(1);
    });
  });
});

如果我添加更多.dive(),我收到了错误消息:

TypeError: ShallowWrapper::dive() can not be called on Host Components

如果只有2次潜水或1次潜水,则表示预期值(1)与收到的(0)不同,因此测试失败。

如果我尝试使用rendermount抱怨,该商店是预期的,但价值未定义。

有没有办法测试我所选择的路径上是否呈现了我的组件?

0 个答案:

没有答案