我将如何在反应测试库中测试反应路由器路由参数?
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/
我正在使用 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/