我将如何在反应测试库中测试反应路由器路由参数?

How would I test for a react router route param in react-testing-library?

我正在使用 redux 和 react 路由器。

我想测试路由参数是否显示在页面上。

test('route param is displayed', async () => {
  const { queryByText } = customRender(
    <EditCard />,
    {
      route: '/card/1554990887217',
    }
  );
const cardId = queryByText(/1554990887217/);
await waitForElement(() => cardId);
})

我的自定义渲染像这样包装路由器和 redux:

export const customRender = (
  ui,
  {
    route = '/',
    history = createMemoryHistory({ initialEntries: [route] }),
    initialState,
    store = createStore(rootReducer, initialState),
    ...options
  } = {}
) => ({
  ...rtl(
    <Provider store={store}>
      <Router history={history}>{ui}</Router>
    </Provider>,
    options
  ),
  history,
});

路由参数只是没有出现在测试中。它只是超时错误。

它在页面上运行正常,因为如果我启动应用程序并手动测试它,一切都会按预期运行。

想通了。

没想到你还需要传入路由。

const { queryByText } = render(
    <Route path="/card/:cardId">
      <EditCard />
    </Route>,
    {
      route: '/card/1554990887217',
    }
  );

如果你不使用 redux 或者不想编写自定义渲染器,这里有一个更简单的方法 https://react-testing-examples.com/jest-rtl/react-router/