Фон
У меня есть "постепенный откат", встроенный в сагу с использованием эффекта 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();