Мне было интересно, как мне тестировать подобные саги.Я использую Redux-Saga-Test.Вот фрагмент кода.
Я прокомментировал фрагмент кода, который трудно понять для меня.Я предполагаю, что проблема в том, что полезная нагрузка для действия не является результатом вызова API, а извлекает данные из него.С другой стороны, мне не нравится идея передавать StoriesListResponse редуктору.Как мне подходить к тем видам тестов, где возвращаемое значение не от yield'ing?
Saga для тестирования:
export function* fetchStoriesWorker() {
try {
yield put({ type: type.FETCH_STORIES_START });
const storiesListResponse = yield call(api.stories.list);
yield put({
type: type.FETCH_STORIES_SUCCESS,
payload: storiesListResponse.data // payload isn't result of yielding and that's ok
});
} catch (error) {
yield put({ type: type.FETCH_STORIES_FAILURE, payload: error });
}
}
Тест длясага:
it("should fetch stories if there is no any error", () => {
const mockData = [1, 2];
const generator = actions.fetchStoriesWorker();
const expect = fromGenerator(assert, generator);
expect.next().put({ type: type.FETCH_STORIES_START });
expect.next().call(api.stories.list);
expect
.next(mockData)
.put({ type: type.FETCH_STORIES_SUCCESS, payload: mockData }); // throwing AssertionError: expected { Object (@@redux-saga/IO, combinator, ...) } to deeply equal { Object (@@redux-saga/IO, combinator, ...) }
});
Нет проблем с этим подходом, если я начну возвращать в качестве полезной нагрузки StoriesListResponse вместо StoriesListResponse.data , однако мне это не нравится.