Это потому, что когда вы высмеивали его, вы не указали значение.
Я подумал о двух способах сделать это:
- Наличие реального хранилища в тесте , так что вы можете проверить интеграцию:
const mockedStore = { /* the things you need in store in your test */ };
const store = configureStore(mockedStore, browserHistory);
const { getByTestId } = render(<Provider store={store}><Dropdown /></Provider>);
Насмехайтесь над своим
dispatch
, но у вас останутся бесконечные проблемы с
useSelector
(особенно если у вас есть более одного useSelector в дереве, которое вы рендерили).
import * as ReactRedux from 'react-redux';
// useDispatch returns a function which we are mocking here
const mockDispatch = jest.fn();
beforeAll(() => {
ReactRedux.useDispatch = jest.fn().mockImplementation(() => mockDispatch);
});
beforeEach(() => {
ReactRedux.useDispatch.mockClear();
});
expect(mockDispatch).toHaveBeenCalledWith(yourAction);
Пожалуйста обратите внимание, что реальная проблема, с которой вы столкнетесь, связана не с отправкой, а с useSelector
. Если вы будете издеваться над ним, он вернет значение, которое вы хотите. Но что если в вашем дереве их больше одного? для этого мне нужен настоящий магазин, насколько я знаю.