Тестируйте величину задержки redux-saga, используя план-теста redux-saga - PullRequest
1 голос
/ 08 марта 2019

Фон

У меня есть "постепенный откат", встроенный в сагу с использованием эффекта Redux-saga delay().

Я использую expectSaga из redux-saga-test-plan , чтобы написать тест.

Но чтобы заработал на тесте, мне пришлось отключить задержку .

Вопрос

Как лучше всего проверить величину задержки?

Код

Функция «Отключить», которая возвращает 1 с, 2 с или 3 с

const BACK_OFF_SERIES = [1000, 2000, 3000];
const backOff = attempt =>
  BACK_OFF_SERIES[Math.min(attempt, BACK_OFF_SERIES.length - 1)];

tryDownload saga

const MAX_ATTEMPTS = 3;
function* tryDownloadFiles(assets, downloadOptions) {
  for (let attempts = MAX_ATTEMPTS; attempts; attempts -= 1) {
    try {
      const urls = yield call(downloader, assets, downloadOptions);
      return urls;
    } catch (error) {
      if (attempts > 1) {
        yield call(delay, backOff(attempts));
      } else {
        yield put(
          showError({
            error: `${error}. Failed!`,
          })
        );
      }
    }
  }
}

И тест expectSaga, который использует провайдера, обходят delay:

const res = expectSaga(tryDownloadFiles, mockAssets, mockDownloadOptions)
  .provide([
    [matchers.call.fn(delay), null],
    [matchers.call.fn(downloader), throwError(mockError)],
  ])
  // .call(delay, backOff(3))
  // .call(delay, backOff(2))
  // .call(delay, backOff(1))
  .put(showError({ error: `${mockError}. Failed!` }))
  .run();

1 Ответ

0 голосов
/ 11 марта 2019

Документы Dynamic Providers , которые вы опубликовали, сообщают об этом примере

.provide({
call(effect, next) {
// Check for the API call to return fake value
if (effect.fn === api.fetchUser) {
    const id = effect.args[0];
    return { id, name: 'John Doe' };
}

// Allow Redux Saga to handle other `call` effects
return next();
},

Итак, вы не могли бы поместить все аргументы effect.args (значение задержки) в массив, а затемпроверить его содержимое?

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