Как протестировать сагу о редуксе, которая вызывает API? - PullRequest
0 голосов
/ 04 октября 2019

Я бы хотел протестировать сагу о редуксе, которая выполняет вызов API, я слышал, что могу использовать значение generator.next (), но похоже, что он не возвращает результат API:

saga.ts

import API from 'utils/api';
import {
  all, call, fork, put, takeEvery,
} from 'redux-saga/effects';
import { PeopleActionTypes } from './types';
import { fetchError, fetchSuccess } from './action';

function* handleFetch() {
  try {
    const res = yield call(API.getRequest, 'https://randomuser.me/api/?results=5&inc=gender,email&noinfo');

    if (res.error) {
      yield put(fetchError(res.error));
    } else {
      yield put(fetchSuccess(res));
    }
  } catch (err) {
    if (err instanceof Error && err.stack) {
      yield put(fetchError(err.stack));
    } else {
      yield put(fetchError('An unknown error occured.'));
    }
  }
}

function* watchFetchRequest() {
  yield takeEvery(PeopleActionTypes.FETCH_REQUEST, handleFetch);
}

function* peopleSaga() {
  yield all([fork(watchFetchRequest)]);
}

export default peopleSaga;

saga.test.ts

import peopleSaga from '../../../store/people/saga';

describe('People saga test', () => {
  it('Should fetch a good result', () => {
    const generator = peopleSaga();
    expect(generator.next()).toEqual('ok');
  });
});

Я напечатал хорошо, просто чтобы увидеть полученный результат, он получает мне это:

Expected: "ok"
Received: {"done": false, "value": {"@@redux-saga/IO": true, "combinator": true, "payload": [{"@@redux-saga/IO": true, "combinator": false, "payload": {"args": [], "context": null, "fn": [Function watchFetchRequest]}, "type": "FORK"}], "type": "ALL"}}

  4 |   it('Should fetch a good result', () => {
  5 |     const generator = peopleSaga();
> 6 |     expect(generator.next()).toEqual('ok');
    |                              ^
  7 |   });
  8 | });

Чего не хватает?

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