Лучший способ интеграционного тестирования с помощью redux-saga - PullRequest
1 голос
/ 09 мая 2019

Я работаю над проектом, который использует redux-saga для управления изменением состояния из вызовов API.

Я видел множество примеров того, как провести модульное тестирование саги, но мало примеров, которые я могу применить, чтобы действительно провести интеграционное тестирование. Мы используем jest для утверждений.

Я бы хотел убедиться, что когда наш пользователь нажимает сохранить, отправляется правильное действие, которое вызывает правильную сагу, которая затем получает некоторые данные из нашего API, меняя состояние. Я хочу проверить весь поток. Если API является поддельным, то это нормально.

Код изначально был в Typescript, но для простоты изменил его на обычный JS. Мы используем typescript-fsa для создания действий, к чему относится actionCreator.

Я понятия не имею, как на самом деле проверить сагу с определенным действием. В этом случае все начинается с действия FETCH_ITEMS_STARTED. Это вызывает наблюдателя, который вызывает handleFetchItems. Это относится к другому генератору, который дает обещание, которое разрешается после завершения вызова API, и должно отправлять действие FETCH_ITEMS_DONE с результатом.

function* handleFetchItems (action) {
    yield call(
        helperGenerator, 
        action, 
        actionCreator,
        function (payload) {
            // more code goes here...
            return api.getItems(payload);
        }
    );
}

function* helperGenerator (action, actionCreator, callback) {
    let result = yield call(function () {
        return callback(action.payload);
    });
    yield put(actionCreator.done({
        params: action.payload,
        result
    }));
}

function* watcher () {
   yield takeEvery(items.started, handleFetchItems);
}
...