我想通过单元测试测试组件,我不知道如何呈现组件,它出错。我只能使用“React-testing-library”错误:在“Connect(BaseSignUp)"的上下文中找不到“store”。请将根组件 Package 在中,或者将自定义React上下文提供程序传递到,并将相应的React上下文使用者传递到连接选项中的Connect(BaseSignUp)。x1c 0d1x
x6h2sr281#
因为组件使用Redux状态,所以需要用Provider Package 它。比如像这样
Provider
const Wrapper = ({ children }) => ( // you could just use your normal Redux store or create one just for the test <Provider store={store}>{children}</Provider> ); render(<BaseSignup />, { wrapper: Wrapper });
fnvucqvd2#
您需要创建一个不同的通用呈现 Package 器来解决这些问题,因为大多数组件都需要存储访问例如:我已经创建了这个 Package 器,并将其导出为rtlRender
import { render } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from 'react-query'; import { Provider } from 'react-redux' import ReduxStore from "../redux/store"; const queryClient = new QueryClient(); const rtlRender = component => render(<Provider store={ReduxStore.store}> <QueryClientProvider client={queryClient}> {component} </QueryClientProvider> </Provider>) export default rtlRender
现在我在测试文件中使用rtlRender
import { screen } from '@testing-library/react' import NewUsers from './NewUsers' import rtlRender from '../../../utils/rtlRender' describe('New User', () => { test('Proper Text', () => { rtlRender(<NewUsers userDetails={[]} />) const addUserHeading = screen.getByText('Add user') expect(addUserHeading).toBeInTheDocument(); }) })
2条答案
按热度按时间x6h2sr281#
因为组件使用Redux状态,所以需要用
Provider
Package 它。比如像这样
fnvucqvd2#
您需要创建一个不同的通用呈现 Package 器来解决这些问题,因为大多数组件都需要存储访问
例如:我已经创建了这个 Package 器,并将其导出为rtlRender
现在我在测试文件中使用rtlRender