Inf*_*dia 5 javascript reactjs jestjs react-helmet react-testing-library
我正在编写测试用例来测试我的主页,但在编译代码时开玩笑,并在头盔标签处中断。
我搜索并发现我应该用react- helmet-async替换react-helmet并使用HelmetProvider。
现在我陷入了以下错误。
console.error
The above error occurred in the <HelmetDispatcher> component:
at construct (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-helmet-async/src/Dispatcher.js:8:22)
at construct (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-helmet-async/src/index.js:15:14)
at div
at App
at construct (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-helmet-async/src/Provider.js:37:5)
at construct (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-router/cjs/react-router.js:113:30)
at construct (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-router/cjs/react-router.js:202:35)
at fn (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-query/lib/react/QueryClientProvider.js:45:21)
at fn (/Users/utkarshgupta/Documents/Fynd/quintessa/node_modules/react-redux/lib/components/Provider.js:21:20)
at fn (/Users/utkarshgupta/Documents/Fynd/quintessa/src/__test__/helpers/test-utils.js:28:22)
Run Code Online (Sandbox Code Playgroud)
我正在使用自定义 SSR,因此我已将渲染包装到 HelmetProvider 中的字符串元素。
我的渲染函数:
export const render = (
ui,
{
initialState = initialReducerState,
store = createStore(rootReducer, initialState),
...renderOptions
} = {}
) => {
const Wrapper = ({ children }) => (
<Provider store={store}>
<QueryClientProvider client={queryClient} contextSharing={true}>
<Router>
<HelmetProvider>{children}</HelmetProvider>
</Router>
</QueryClientProvider>
</Provider>
);
return {
...rtlRender(ui, {
wrapper: Wrapper,
...renderOptions,
}),
store,
};
};
Run Code Online (Sandbox Code Playgroud)
SSR JSX:
let jsx = extractor.collectChunks(
<Provider store={store}>
<QueryClientProvider client={queryClient}>
<Hydrate state={dehydratedState}>
<StaticRouter location={req.originalUrl} context={null}>
<HelmetProvider context={helmetContext}>
<App />
</HelmetProvider>
</StaticRouter>
</Hydrate>
</QueryClientProvider>
</Provider>
);
Run Code Online (Sandbox Code Playgroud)
上述错误不允许我测试在反应组件中使用 Helmet 和其他 seo 标签的所有页面。