reactjs - 找不到 react-redux 上下文值;确保组件被包裹在一个
问题描述
我正在处理 nextjs 项目,当我尝试测试时出现以下错误
找不到 react-redux 上下文值;请确保组件被包裹在一个<Provider>
27 | const Home = () => {
28 | const classes = useStyles();
> 29 | const dispatch = useDispatch();
| ^
30 |
31 | const movies = useSelector((state: RootState) => state.movies.movies);
32 | const isMovieSaving = useSelector(
只有在使用 useDispatch 挂钩时,我才会收到此错误。
_app.tsx
const App = ({ Component, pageProps }) => {
const classes = useStyles();
return (
<Provider store={store}>
<ThemeProvider theme={Theme}>
<CssBaseline />
<Container className={classes.root}>
<Header />
<div className={classes.contentContainer}>
<Component {...pageProps} />
</div>
<Footer links={[Instructions, Design, Swagger, Storybook]} />
</Container>
</ThemeProvider>
</Provider>
);
};
索引.tsx
const Home = () => {
const classes = useStyles();
const dispatch = useDispatch();
return (
<div className={classes.container}>
<MoviesList
movies={movies}
getRating={getRating}
saveMovie={saveMovie}
formBackgroundColor={formBackgroundColor}
/>
</div>
);
export default Home;
错误说我应该用 Provider 包装组件。但我已经在 _app.tsx 中完成了。我也尝试用 Provider 包装 Home 组件,但得到了相同的结果。这可能是什么原因?
解决方案
您可能正在使用 aconfigTest.js
来设置测试的一些细节。
由于您的Home
组件正在使用 redux 提供程序(或任何提供程序),因此您需要在configTest.js
. 在此示例中,我使用该render
方法(来自 react 测试库),然后创建另一个customRender
函数并将其导出,您也可以使用 jest 设置此方法。
import React from 'react';
import {render} from '@testing-library/react';
import ReduxProvider from './providers/redux-provider';
import RouterProvider from './providers/router-provider';
afterAll(() => jest.clearAllMocks());
const AllTheProviders = ({children}) => {
return (
<ReduxProvider>
<RouterProvider>
{children}
</RouterProvider>
</ReduxProvider>
);
};
const customRender = (ui, options) => render(ui, {wrapper: AllTheProviders, ...options});
export * from '@testing-library/react';
export * from '@testing-library/jest-dom';
export {customRender as render};
现在在您的测试文件中,您需要render
从此文件中导入和其他方法,而不是从测试库或开玩笑库中导入它们
import {render, fireEvent, screen} from 'configTests';
推荐阅读
- python - Python - 如果 json.object 为空,重复该函数直到新值?
- java - 如何在 Web 项目中使用 Spring 5 的 RouterFunction?
- android - 程序类型已经存在:com.android.volley.Cache$Entry
- curl - Ansible 使用 --data-urlencode 转换 curl 请求
- jquery - 手风琴中的 Jquery Accordion
- halcon - 使用图像采集 GUI 和导出的 HDevelop 代码的性能冲突
- angular - Angular 6:无法在页面加载时加载子路由
- c# - 如何上传到 FTP
- android - 使用 react-native-push-notification,App 在收到新的 FCM 通知时崩溃
- python - 如何使用 python 在 Tensorboard 上显示模型的权重和偏差