тестирование функции обратного вызова redux saga - PullRequest
0 голосов
/ 18 июня 2020

В функции saga после успеха я выполняю обратный вызов. Я пытался покрыть это тестированием, но это не покрылось. Может ли кто-нибудь предложить способ покрытия этих полей.

export function* submitSavedDataWorker(action) {
      try {
        const response = yield call(suggestFunction, action.payload);
        const { data } = action.payload;
        yield put({
          type: actionTypes.suggestType,
          payload: response.data,
          prevData: data,
        });
        if (action.successFn) {
          action.successFn(response.data);
        }
      } catch (error) {
        const { charityData } = action.payload;
        yield put({
          type: actionTypes.saveFailType,
          payload: error,
          prevData: data,
        });
      }
    }

Я написал тестовый пример, например:

describe('submitSavedDataWorker success', ()=> {
      const it = sagaHelper(
        submitSavedDataWorker({ payload: { data: 1234 }, successFn: ()=> { return 0 } })
      );
      it("should get error as result", (result) => {
        expect(result).toEqual(
          call(suggestFunction, { data: 1234 })
        );
        return {data: true};
      });
      it("should get success as result", (result) => {
        expect(result).toEqual(
          put({
            type: actionTypes.suggestType,
            payload: true,
            prevData: 1234,
          })
        );
      });
    });

1 Ответ

0 голосов
/ 19 июня 2020

sagaHelper продвигает сагу только на один эффект за раз при вызове it - так что генератор прекращает работу после получения эффекта put. Чтобы сага завершилась до конца (и таким образом выполнили непокрытые строки), необходимо еще раз вызвать it. Вы также можете проверить, что результат равен undefined, чтобы убедиться, что сага завершена, что-то вроде:

      it("should complete", (result) => {
        expect(result).toBeUndefined();
      });

С этим дополнением, вот полный тест:

describe('submitSavedDataWorker success', ()=> {
      const it = sagaHelper(
        submitSavedDataWorker({ payload: { data: 1234 }, successFn: ()=> { return 0 } })
      );
      it("should get error as result", (result) => {
        expect(result).toEqual(
          call(suggestFunction, { data: 1234 })
        );
        return {data: true};
      });
      it("should get success as result", (result) => {
        expect(result).toEqual(
          put({
            type: actionTypes.suggestType,
            payload: true,
            prevData: 1234,
          })
        );
      });
      /* New code is here */
      it("should complete", (result) => {
        expect(result).toBeUndefined();
      });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...