redux 将根组件 Package 在中< Provider>,或者将自定义React上下文提供者传递到,< Provider>并将相应的React上下文使用者传递到Connect

x759pob2  于 2022-12-23  发布在  React
关注(0)|答案(2)|浏览(156)

我想通过单元测试测试组件,我不知道如何呈现组件,它出错。我只能使用“React-testing-library
错误:在“Connect(BaseSignUp)"的上下文中找不到“store”。请将根组件 Package 在中,或者将自定义React上下文提供程序传递到,并将相应的React上下文使用者传递到连接选项中的Connect(BaseSignUp)。x1c 0d1x

x6h2sr28

x6h2sr281#

因为组件使用Redux状态,所以需要用Provider Package 它。
比如像这样

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 });
fnvucqvd

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();
  })
})

相关问题