насмешливое использование магазина Reducer внутри Jest / Enzyme без импорта редуктора - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь написать тест, который включает обновление состояния useReducer для компонента с именем <Dashboard />.

  const [store, dispatch] = useReducer(reducer, dashboardStore);

Внутри теста я хочу иметь возможность обновить store.

    const wrapper = mount(<Dashboard />); // <Dashboard /> contains the useReducer

    ...

    it('example test', () => {
      let mockStore = ['first item'];
      mockStore.push('second item');

      expect(wrapper.find(Dashboard).find('input').props().value.toBe('second item');
    });

В примере теста у меня есть псевдокод, имитирующий store и затем помещающий в него значение. Затем я проверяю, был ли обновлен другой дочерний элемент в этом компоненте на основе изменения store.

Возможно ли это? Нужно ли мне импортировать useReducer в тестовый файл?

1 Ответ

1 голос
/ 19 марта 2020

Возможно, если вы реорганизуете Dashboard, чтобы использовать инжекцию зависимостей, предоставляя начальное состояние магазина в качестве реквизита:

function Dashboard({dashboardStore}) {
    ...
    const [store, dispatch] = useReducer(reducer, dashboardStore);
    ...
}

Затем вы можете предоставить макет хранилища в качестве реквизита в ваш тест:

let mockStore = ['first item'];
mockStore.push('second item');
const wrapper = mount(<Dashboard dashboardStore={mockStore} />);

В противном случае, если это невозможно, у вас останется насмешка useReducer в вашем тесте.

...