Как устранить ошибку «Нарушение инварианта», связанную с избыточным хранилищем? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытался провести DOM-тестирование, чтобы проверить, открывается ли диалоговое окно при нажатии кнопки. Тогда я получил эту ошибку

Инвариантное нарушение: не удалось найти «store» ни в контексте, ни в подпунктах «Connect (фотографии)». Либо оберните корневой компонент в, либо> явно передайте «store» в качестве реквизита «Connect (фотографии)».

Я использовал jest, и мой компонент подключен к хранилищу резервов с помощью

экспорт подключения по умолчанию (mapToProps) (фотографии);

AccessoriesPhotos.js

class Photos extends React.Component {
    constructor() {
        super();
        this.state = {
            open: false,

        }
        this.handleOpen = this.handleOpen.bind(this);
    }
    handleOpen = () => {
        this.setState({ open: true });
    };

    render (){
        return (....)
    }

    const mapToProps = (state) => {
        return {
          Search: state.Search,
          App: state.App
        }
      }


    export default connect(mapToProps)(Photos);
}

AccessoriesPhotos.test.js

import React from 'react';
import Enzyme, {shallow} from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import { Photos } from '../../../Photos/Bike/AccessoriesPhotos';

Enzyme.configure({adapter: new Adapter()});

it('Dialog box opens after click', () => {

  const openDialogButton = shallow(<Photos open="true" close="false" />);

  expect(openDialogButton.text()).toEqual('true');

  openDialogButton.find('input').simulate('change');

  expect(openDialogButton.text()).toEqual('false');
});

Это то, что я получил в результате.

Инвариантное нарушение: не удалось найти «store» ни в контексте, ни в подпунктах «Connect (фотографии)». Либо оберните корневой компонент в, либо> явно передайте «store» в качестве реквизита «Connect (фотографии)». Strong text

1 Ответ

1 голос
/ 05 апреля 2019

Ваш Photos компонент не получает store, так как вы не переводите его как ребенка в Provider в своем тесте.Если вы поместите его в Provider для теста, он также будет работать как положено.

const openDialogButton = shallow(
  <Provider store={store}>
    <Photos open="true" close="false" />
  </Provider>
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...