我有以下超级简单的Redux-Saga,我想用Jest进行测试。
function* nextApi() {
yield* takeEvery(
(action) => !!(action.meta && action.meta.next),
nextApiSaga
)
}我看过Redux-Sagas-Test-Plan,但它似乎只允许您对包含Saga Effect创建器的函数进行单元测试,并且似乎不支持Saga Helper。也有Redux-Saga-Test,但它只是对产生的效果执行deepEqual,而不是测试箭头函数。
我希望能够做的是将以下两个对象传递给takeEvery,并看到nextApiSaga只在第二种情况下被调用。
{ type: 'foo' }
{ type: 'foo', meta: { next: 'bar' } } 发布于 2017-01-31 03:29:28
我给你留下了一条关于redux- saga - test -plan具有saga助手方法的评论,但是你可以很容易地用它来测试takeEvery。使用您的saga调用testSaga,然后使用模式调用takeEvery方法断言(注意,我保留了对原始匿名函数的引用)和其他saga。
const helper = action => !!(action.meta && action.meta.next)
function* nextApi() {
yield* takeEvery(
helper,
nextApiSaga
)
}
testSaga(nextApi).takeEvery(helper, nextApiSaga)发布于 2017-01-17 00:20:56
采取一种不同的方法,我想出了这个。我不确定这是否是最好的答案,但它似乎起作用了。在这里添加,以防其他人有同样的问题,并仍然开放更好的建议。
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)
})https://stackoverflow.com/questions/41680107
复制相似问题