Error Handling in Saga Tests
Demonstrate effective strategies for testing error handling within sagas, including how to mock error scenarios and assert that the saga handles them as expected.
import { testSaga } from 'redux-saga-test-plan';
import { throwError } from 'redux-saga-test-plan/providers';
import { fetchUserData, api } from './sagas';
// Saga function to be tested
function* fetchUserData(userId) {
try {
const data = yield call(api.getUser, userId);
yield put({ type: 'FETCH_SUCCESS', data });
} catch (error) {
yield put({ type: 'FETCH_FAILURE', error });
}
}
This is the saga function that fetches user data. It tries to call an API, and on success, it dispatches a FETCH_SUCCESS action. If it catches an error, it dispatches a FETCH_FAILURE action. This setup will be used for testing error handling.
const userId = 1;
const error = new Error('An error occurred');
testSaga(fetchUserData, userId)
.next()
.throw(error)
.put({ type: 'FETCH_FAILURE', error })
.next()
.isDone();
This test case demonstrates how to test error handling in a saga. It uses testSaga to simulate throwing an error when trying to fetch user data. The test asserts that the saga then dispatches the expected FETCH_FAILURE action with the error.