我知道 React 测试库有一个使用 React 路由器进行测试的示例,但我无法让它工作(我想是因为我使用的是 React 路由器 V6)。
基本上,我需要路由器测试,因为我有使用 useParams() 来获取部分 url 的详细信息组件。没有它我无法渲染组件。
这是我让它工作的尝试(是的,该页面也需要 apollo,尽管它并不真正需要 redux)。
const AllTheProviders = ({children, initialRoutes}) => {
return (
<ApolloProvider client={client}>
<Provider store={store}>
<MemoryRouter>
{children}
</MemoryRouter>
</Provider>
</ApolloProvider>
);
}
const customRender = (ui, options) => render(ui, {wrapper: AllTheProviders, ...options})
beforeEach(() => {
window.history.pushState({}, 'Test page',"/details/url-param-the-component-needs")
customRender(<App/>);
});
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,但这不起作用。我假设 window.history.pushState() 不适用于 React Router V6。我尝试使用 useNavigate(),但这在组件之外不起作用。
如果有人对我如何使这项工作有任何想法。我将不胜感激。