Как проверить ошибки запросов API с помощью Redux Saga?

Я пытаюсь проверить все сценарии, которым может следовать моя сага, но я не в состоянии добиться желаемого поведения. Это довольно просто, у меня есть HTTP-запрос (логин), и я хочу проверить успешность и случаи сбоев, высмеивая мой метод API.

Но, похоже,call effect я не запускаю свою функцию API, я пока не совсем понимаю, как она работает, но я думаю, что промежуточное программное обеспечение отвечает за вызов функции, и, поскольку я не хожу, хотя магазин в моем тесте, я могу ' не получить результат.

Итак, мой вопрос: как вы можете проверить свою сагу, когда вам нужно отправлять различные действия (обычно успех или неудача) рядом с вашим асинхронным вызовом?

Я искал пример, я нашел саги с успехом и неудачей, но случай неудачи никогда не тестировался, например, в примере корзины покупокВот

SAGA.JS

export function* login(action) {
  try {
    const user = yield call(api.login, action);
    return yield put(actions.loginSuccess(user));
  } catch(e) {
    yield put(actions.loginFail(e));
  }
}

export default function* rootAuthenticationSagas() {
  yield* takeLatest(LOGIN, login);
}

TEST.JS

describe('login', () => {
  context('When it fails', () => {
    before('Stub the api', () => {
      sinon.stub(api, 'login', () => {
        // IT NEVER COMES HERE !
        return Promise.reject({ error: 'user not found' });
      });
    });

    it('should return a LOGIN_FAIL action', () => {
      const action = {
        payload: {
          name: 'toto',
          password: '123456'
        }
      };
      const generator = login(action);

      // THE CALL YIELD
      generator.next();

      const expectedResult = put({ type: 'LOGIN_FAIL', payload: { error: 'user not found' } });
      expect(generator.next().value).to.be.eql(expectedResult); // FAIL BECAUSE I GET A LOGIN_SUCCESS INSTEAD OF A FAIL ONE
    });
  });
});

Ответы на вопрос(3)

Ваш ответ на вопрос