Redux Container Unit Testing - Невозможно получить доступ к реквизиту для обернутого компонента
После обновления React v6 мои существующие тестовые наборы для компонента не пройдены.
Вот мой код контейнера компонента TodoContainer.jsx:
import { connect } from 'react-redux';
import Todo from './Todo';
import { initialLoadExecuted } from '../../actions/LoadActions';
const mapStateToProps = state => ({
isCollapsed: true,
pinnedTiles: false,
});
const mapDispatchToProps = dispatch => ({
dispatchInitialLoadExecuted: (tiles) => {
dispatch(initialLoadExecuted(tiles));
},
});
export default connect(mapStateToProps, mapDispatchToProps)(Todo);
Вот мой тестовый код TodoContainer.test.jsx:
import React from 'react';
import configureStore from 'redux-mock-store';
import {Provider} from 'react-redux';
import TodoContainer from '../../../../src/todo-component/components/Todo/TodoContainer';
import { initialLoadExecuted } from '../../../../src/todo-component/actions/LoadActions';
const mockStore = configureStore();
let store;
describe('Todo Container', () => {
beforeEach(() => {
store = mockStore({
});
it('maps state props correctly', () => {
const wrapper = shallow(<TodoContainer store={store}/>);
wrapper.prop('dispatchInitialLoadExecuted')('Test String);
// Expect statements
});
});
Я получаю ошибку:
Нарушение инварианта: Передача избыточного хранилища в реквизит была удалена и ничего не делает. Чтобы использовать пользовательское хранилище Redux для определенных компонентов, создайте пользовательский контекст React с помощью React.createContext() и передайте объект контекста провайдеру React-Redux и определенным компонентам, таким как: . Вы также можете передать параметр {context: MyContext} для подключения.
Есть ли способ передать хранилище через провайдера при доступе к реквизиту, таким же образом?
1 ответ
Похоже, что response-redux v6.0.0 теперь поддерживает новый API-интерфейс контекста, добавленный в React v 16.4.0 (а также требует, чтобы теперь была версия реакции).
Я смог решить эту проблему и сохранить шаблон mockStore, установив response-redux@5.1.1 и Reaction@16.3.0 (до того, как они представили Context API).
Дальнейшее тестирование: я могу использовать response@16.7.0 до тех пор, пока я использую response-redux@5.1.1
На вкладке "Вопросы о реактивном редуксе на github" продолжается обсуждение: https://github.com/reduxjs/react-redux/issues/1161
Не долгосрочное решение, так как я застрял в этой версии React, но она прошла тест, и я смог получить 100% покрытие кода.