Я работаю над проектом, который использует 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);
}