Вы можете указать Provider в качестве оболочки для метода рендеринга из библиотеки реагирующего тестирования
it('renders welcome message', () => {
const store = configureStore({
reducer: combineReducers({}),
})
console.log(store)
const Wrapper = ({children}) => {
return <Provider store={store}>{children}</Provider>
}
const { getByText } = render(
<h1>hi</h1>,
{wrapper: Wrapper}
)
expect(getByText('hi')).toBeInTheDocument()
})
Вы также можете переопределить метод рендеринга библиотеки тестирования, чтобы сделать логи Wrapper c Generi c как упоминается в документации
// test-utils.js
import React from 'react'
import { render as rtlRender } from '@testing-library/react'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import { initialState as reducerInitialState, reducer } from './reducer'
function render(
ui,
{
initialState = reducerInitialState,
store = createStore(reducer, initialState),
...renderOptions
} = {}
) {
function Wrapper({ children }) {
return <Provider store={store}>{children}</Provider>
}
return rtlRender(ui, { wrapper: Wrapper, ...renderOptions })
}
// re-export everything
export * from '@testing-library/react'
// override render method
export { render }
и используется как
// counter.test.js
import React from 'react'
import { createStore } from 'redux'
// We're using our own custom render function and not RTL's render
// our custom utils also re-export everything from RTL
// so we can import fireEvent and screen here as well
import { render, fireEvent, screen } from './test-utils'
import '@testing-library/jest-dom/extend-expect'
it('renders welcome message', () => {
const store = configureStore({
reducer: combineReducers({}),
})
const { getByText } = render(
<h1>hi</h1>,
{store}
)
expect(getByText('hi')).toBeInTheDocument()
})