我有以下超级简单的Redux-Saga,我想用Jest测试。
function* nextApi() {
yield* takeEvery(
(action) => !!(action.meta && action.meta.next),
nextApiSaga
)
}
我已经查看了Redux-Sagas-Test-Plan,但这似乎只允许您对包含Saga Effect Creators的单元测试功能进行单元测试,并且似乎不支持Saga Helpers。还有Redux-Saga-Test但是它只对屈服效应做了一个deepEqual并且没有测试箭头函数。
我希望能够做的是将以下两个对象传递给takeEvery
,并看到nextApiSaga仅在第二种情况下被调用。
{ type: 'foo' }
{ type: 'foo', meta: { next: 'bar' } }
答案 0 :(得分:1)
我给你留下了关于redux-saga-test-plan的评论,其中包含了saga助手的方法,但你可以轻松地用它来测试takeEvery
。使用你的saga调用testSaga
,然后使用模式调用takeEvery
方法断言(注意我保留对原始匿名函数的引用)和另一个传奇。
const helper = action => !!(action.meta && action.meta.next)
function* nextApi() {
yield* takeEvery(
helper,
nextApiSaga
)
}
testSaga(nextApi).takeEvery(helper, nextApiSaga)
答案 1 :(得分:0)
采取不同的方法,我想出了这个。不确定它是否是最佳答案,但似乎有效。如果其他人遇到同样的问题并且仍然可以提供更好的建议,请添加此处。
function getTakeEveryFunction(saga) {
return saga().next().value.TAKE.pattern
}
it('takes actions with meta.next property', () => {
const func = getTakeEveryFunction(nextApi)
expect(func({ type:'foo' })).toBe(false)
expect(func({ type:'foo', meta: { next: 'bar' } })).toBe(true)
})