redux-saga-test-plan
redux-saga-test-plan copied to clipboard
How to use getContext in testSaga unit test
Context
In the application we adopted Sagas to manage our side effects. We've tried to use this excellent library to improve our test readability of our tests and that the ordering of the yields are correct.
Our application provides our apis through the application using the Context API. This is where we've hit a slight speed bump in the test with getContext
.
In our Sagas we're accessing the api through getContext
from the redux-saga/effects
package. e.g.
export function* aSaveGeneratorFunction(someAction) {
...
const { payload: { someEntity } } = someAction
const entityApi = yield getContext("entity")
....
const responseFromApi = yield call([entityApi, `saveSomeEntity`], someEntity)
...
}
In our tests we're trying to mock this dependency
it('should invoke effects in the right order', () => {
const payload = { id: "id" }
const action = { type: "entity/saveEntityRequest", payload }
const saveSomeEntity = () => {
return Promise.resolve([]);
}
getContext.mockImplementation((key: string) => ({
entity: { saveSomeEntity }
}))
return testSaga(aSaveGeneratorFunction, action)
...
.next()
.getContext('entity')
.next()
...
.isDone();
})
Our generator function fails to execute the mock function provided through the getContext
.
- Are we using
getContext
in the correct way? - Is there a particular way to mock
getContext
when usingtestSaga
? (current this mocking works inexpectSaga
) - Do you have any recommendations of how to approach this test?
@sbitproz Thanks for using this library.
Unfortunately, testSaga doesn't support mock getContext, but feel free to try use jest.mock()
instead.
The way to test getContext is using expectSaga, see this PR: https://github.com/jfairbank/redux-saga-test-plan/pull/179/files
Also, feel free to propose your opinion to improve this.
Hi @jp928
Thanks for the efficient reply. Is it worth adding a detail about this on the documentation?