2017-01-16 53 views
0

我有以下超级简单的Redux-Saga,我想用Jest测试。测试缩略图takeEvery

function* nextApi() { 
    yield* takeEvery(
    (action) => !!(action.meta && action.meta.next), 
    nextApiSaga 
) 
} 

我已经看了Redux-Sagas-Test-Plan,但似乎只允许你包含佐贺影响创作者似乎并没有支持佐贺助手单元测试功能。也有Redux-Saga-Test但这只是在收益效果上做了deepEqual,并没有测试箭头函数。

我想要做的是将以下两个对象过滤到takeEvery,并看到nextApiSaga仅在第二种情况下调用。

{ type: 'foo' } 

{ type: 'foo', meta: { next: 'bar' } } 
+0

嗨,大卫。实际上,redux-saga-test-plan已经支持了很久的传奇助手。你可能错过了那些文档:[佐贺助手](http://redux-saga-test-plan.jeremyfairbank.com/unit-testing/saga-helpers.html)。 – jfairbank

回答

1

我离开了你关于有佐贺助手方法终极版 - 佐贺试验计划发表评论,但你可以轻松地测试takeEvery它。拨打testSaga与您的传奇,然后调用takeEvery方法断言的模式(注意我保留对原始匿名函数的引用)和其他传奇。

const helper = action => !!(action.meta && action.meta.next) 

function* nextApi() { 
    yield* takeEvery(
    helper, 
    nextApiSaga 
) 
} 

testSaga(nextApi).takeEvery(helper, nextApiSaga) 
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) 
})