React Hooks - useReducer () - Интеграционный тест - PullRequest
1 голос
/ 02 апреля 2020

Я написал функциональный компонент, который использует хук React.useReducer () как часть кода.

Этот компонент имеет редуктор и действия как его часть. Я думал, что вместо того, чтобы тестировать функцию и действия редуктора по отдельности, я напишу интеграционный тест следующим образом:

IntegrationTest. js

describe('integration test for reducers and actions', () => {
    const initialState = { secretWord: 'party' };

    test('dispatch actions and verify updated state', () => {
        const [state, dispatch] = React.useReducer(reducer, initialState);
        dispatch({ type: setSecretWord, payload: 'train' });
        expect(state).toEqual({ secretWord: 'train' });
    });
});

Когда я запускаю тест Я получил ошибку как:

Неправильный вызов ловушки. Хуки могут быть вызваны только внутри тела компонента функции. Это может произойти по одной из следующих причин: 1. У вас могут быть несовпадающие версии React и средства визуализации (например, React DOM). 2. Возможно, вы нарушаете правила хуков. 3. Возможно, у вас есть несколько копий React в то же самое приложение

Как мне написать интеграционные тесты в этом сценарии, поскольку ловушка может вызываться только внутри компонента?

1 Ответ

0 голосов
/ 30 апреля 2020

Поскольку редуктор является простой функцией, вы можете попытаться напрямую вызвать его с вашим начальным состоянием и полезной нагрузкой и проверить, является ли возвращенное обновленное состояние ожидаемым.

...