@AsaAyers/redux-saga-tester
Project Status: Experimental
Expect every 0.x release to break the API. Nothing is settled.
I am releasing this under my namespace because 3LOK already has a
redux-saga-tester
. When the API settles and I want to
release a 1.0.0, I'd like to have a different
name.
Project Goals
- Tests should not be tightly coupled to implementation
- Tests should read in the same order as the saga
- I think this makes them easier to read and understand
Example
For this example I created a toy saga based on 3LOK's comment.
function* addSaga() {
const a = yield select(selectA)
const b = yield select(selectB)
const total = yield call(sum, a, b)
yield put({
type: "RESULT",
payload: total
})
}
I want to verify that this saga uses sum()
to add store.a
and store.b
and
updates store.result
with the total. By default the tester doesn't tell you
about yield select
or yield put
. they happen automatically.
import { addSaga, sum, reducer, selectResult, selectA, selectB } from "./add-saga.js"
test("add-saga", () => {
const tester = SagaTester({
initialState: {
a: 2,
b: 3,
},
reducer,
})
tester.testAgainst(addSaga, function* ({ getState }) {
let actual
actual = yield
expect(actual).toEqual(call(sum, 2, 3))
const callSumResult = 5
actual = yield callSumResult
expect(actual).toBe(END)
actual = selectResult(getState())
expect(actual).toBe(callSumResult)
})
})
This test and some other variations are available in
src/tests/add-saga.test.js
.