redux-saga-test-plan: используйте waitSaga для симуляции сгенерированного исключения - PullRequest
0 голосов
/ 15 октября 2019

Внутри моей саги я вызываю запрос API.

function* sendRequestSaga(): SagaIterator {
    yield takeEvery(Actions.sendRequest.type, sendApiRequest);
}

function* sendApiRequest(action: Action<string>) {
    try {
        yield call(/*args for calling api*/);
    } catch (error) {
        // Handle error
    }
}

Я создал модульный тест для успешного примера. Теперь я хочу создать модульный тест для случая, когда вызов api возвращает исключение.

it("Should handle exception correctly", () => {
    const expectedException = new Error("my expecting exception");
    return expectSaga(mySaga)
        .provide([
            [call(/*args for calling api*/), expectedException],
        ])
        .call(/*args for calling api*/)
        .dispatch({
            type: Actions.sendRequest.type,
            payload: /*args*/
        })
        .silentRun()
        .then(() => {
            // My assertion
        });
}

Но это не работает, потому что provide возвращает только значение для call метода вместо броска new Error объект. Итак, объект Error не перехвачен. Как я могу симулировать действие Ошибка броска?

1 Ответ

0 голосов
/ 15 октября 2019

Оказывается, можно достичь throwError() из redux-saga-test-plan

import { throwError } from "redux-saga-test-plan/providers";

it("Should handle exception correctly", () => {
    const expectedException = new Error("my expecting exception");
    return expectSaga(mySaga)
        .provide([
            [call(/*args for calling api*/), throwError(expectedException)],
        ])
        .call(/*args for calling api*/)
        .dispatch({
            type: Actions.sendRequest.type,
            payload: /*args*/
        })
        .silentRun()
        .then(() => {
            // My assertion
        });
}
...