Я следил за документацией для Redux Sagas и создал набор тестов, однако они кажутся мне очень хрупкими. Всякий раз, когда я обновляю логику в любом из моих саг, мои тесты терпят неудачу. Это вызывает тревогу в моей голове и заставляет меня думать, что я делаю что-то неправильно.Unit Testing Redux Sagas
Вот пример сага, которая обменивается данными с API, чтобы загрузить профиль пользователя и сохранить его в состоянии Redux:
export function* userAuthCheck() {
try {
yield put({ type: START_HTTP });
const me = yield apply(user, user.me);
const organisations = yield apply(user, user.organisations, [me.body.data.id]);
yield put({
type: USER_AUTH_SUCCESS,
redirect: true,
state: {
account: me.body.data,
organisations: organisations.body.data,
},
});
} catch (error) {
yield put({ type: USER_AUTH_REFRESH });
} finally {
yield put({ type: COMPLETE_HTTP });
}
}
Вот соответствующий тест:
it('can successfully call the API',() => {
const generator = userAuthCheck();
expect(generator.next().value).toEqual(put({ type: START_HTTP }));
expect(generator.next().value).toEqual(call(user.me));
expect(generator.next().value).toEqual(put({
type: USER_AUTH_SUCCESS,
state: { user: undefined },
}));
expect(generator.next().value).toEqual(put({ type: COMPLETE_HTTP }));
});
Вы могли бы заметить, что тест будет действительно терпеть неудачу, если вы запустите, потому что я не обновил его, так как я сделал некоторые последние обновления для саги. Это то, что начало меня на этом пути мысли.
Есть ли лучший способ проверить мои саги? Можно ли запускать их от начала до конца, издеваться над различными ответами API и утверждать, что правильные вещи отправляются в состояние?
Эти документы я следующие: https://redux-saga.github.io/redux-saga/docs/introduction/BeginnerTutorial.html
Возможно, это могло бы помочь: https://github.com/jfairbank/redux-saga-test-plan – jkrnak
Это выглядит великолепно - похоже, я могу довольно легко моделировать ответы с помощью 'next()', но мне все равно понадобится обновлять тесты каждый раз, когда я вношу изменения в сагу. Возможно, это неизбежно при использовании функций генератора и 'yield'. – edcs