Redux Container Unit Testing - Невозможно получить доступ к реквизиту для обернутого компонента - PullRequest
0 голосов
/ 09 января 2019

После обновления 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 Ответ

0 голосов
/ 13 января 2019

Похоже, что response-redux v6.0.0 теперь поддерживает новый API-интерфейс контекста, добавленный в React v 16.4.0 (и также требует, чтобы теперь был вариант реакции).

Мне удалось решить проблему и сохранить шаблон mockStore, установив Reaction-redux@5.1.1 и response@16.3.0 (до того, как они представили Context API).

Дальнейшее тестирование: я могу использовать response@16.7.0, если я использую реагировать -redux@5.1.1

На вкладке вопросов о реактивном редукторе github постоянно идет обсуждение: https://github.com/reduxjs/react-redux/issues/1161

Не долгосрочное решение, так как я застрял в этой версии React, но она прошла тест, и я смог получить 100% покрытие кода.

...