Записанная сага возвращается пустой - PullRequest
0 голосов
/ 02 июля 2019

Я использую шаблон тестирования recordSaga для проверки моих саг:

recordSaga.js

import { runSaga } from "redux-saga";
export default async function recordSaga(saga, initialAction) {
  const dispatched = [];

  await runSaga(
    {
      dispatch: action => {
        dispatched.push(action);
        console.log(dispatched);
      }
    },
    saga,
    initialAction
  ).done;
  console.log(dispatched);

  return dispatched;
}

dealAction.test.js

describe("getDealsSaga", () => {
    it("dispatches a success action with the fetched deals", async () => {
      const dispatched = await recordSaga(getDealsSaga, startAction);
      console.log(dispatched);

      expect(dispatched).toContainEqual(successAction);
    });
  });

dealActions.js

export function* getDealsSaga(): Saga<void> {
  try {
    const rawDeals: Object[] = yield call(getDealsApi);
    const deals: Deal[] = rawDeals.map(p => Deal.fromApi(p));
    console.log("getDealsSaga", deals.length, "deals");
    yield put({ type: "GET_DEALS_SUCCESS", deals });
  } catch (error) {
    console.log("getDealsSaga", "error:", error);
    yield put({ type: "GET_DEALS_FAILURE", error });
  }
}

export default function* dealSaga(): Saga<void> {
  yield all([yield takeEvery("GET_DEALS_START", getDealsSaga)]);
}

Тест не пройден, получен пустой массив.Тем не менее, операторы журнала внутри саги , а также внутри recordSaga подтверждают, что сага работает, а обратный вызов внутри recordSaga работает.

    console.log recordSaga.js:15
      []
    console.log __tests__/dealActions.test.js:46
      []
    console.log src/redux/actions/dealActions.js:27
      getDealsSaga 10 deals
    console.log recordSaga.js:9
      [ { type: 'GET_DEALS_SUCCESS',
          deals:
           [ [Deal],
             [Deal],
             [Deal],
             [Deal],
             [Deal],
             [Deal],
             [Deal],
             [Deal],
             [Deal],
             [Deal] ] } ]

Порядокжурналы подразумевают, что что-то не так с асинхронностью в recordSaga или в тестах.

Я очень смущен, потому что я использовал этот шаблон с этим точным кодом - тот же файл recordSaga, saga / actions / tests, которые идентичны, за исключением их данных, - в нескольких других проектах, и яУ меня никогда не было этой проблемы.

...