Integration Testing

Requires global Promise to be available

For integration testing, Redux Saga Test Plan exports an expectSaga function that returns an API for asserting that a saga yields certain effects. To use expectSaga, pass in your generator function as the first argument. Pass in additional arguments which will be the arguments passed on to the generator function.

expectSaga runs your saga with Redux Saga's runSaga function, so it will run just like it would in your application. This also means your saga will likely run asynchronously, so expectSaga will also be asynchronous.

After calling expectSaga on your saga and making some assertions, you can start the saga with the run method. The run method will return a Promise, that you can then use with your favorite testing framework. If any assertions fail, then expectSaga will reject the returned Promise. If all assertions pass, then the Promise will resolve.

Look at the example below that uses Jest as the testing framework. Notice that we return the Promise so Jest knows when the test completes. Also notice that we don't even have to bother testing the call effect with expectSaga.

import { call, put } from 'redux-saga/effects';
import { expectSaga } from 'redux-saga-test-plan';

function* mainSaga(x, y) {
  yield call([console.log, console], 'hello');
  yield put({ type: 'ADD', payload: x + y });
}

it('puts an ADD action', () => {
  return expectSaga(mainSaga, 40, 2)
    // assert that the saga will eventually yield `put`
    // with the expected action
    .put({ type: 'ADD', payload: 42 })

    // run it
    .run();
});

results matching ""

    No results matching ""