2017-01-16 54 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) 
})