Тестирование положительного эффекта, который не является прямым результатом - PullRequest
0 голосов
/ 06 февраля 2019

Мне было интересно, как мне тестировать подобные саги.Я использую 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 , однако мне это не нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...