测试redux saga回调函数

问题描述 投票:0回答:0

在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,
        });
      }
    }

我写的测试用例是这样的:在saga函数中,成功后,我在做回调。

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,
          })
        );
      });
    });
redux jestjs redux-saga redux-saga-test-plan
0
投票

輸出函數* ... 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();
      });
    });
© www.soinside.com 2019 - 2024. All rights reserved.