2017-06-08 22 views
0

我有一個非常簡單的函數返回一個對象:如何捕獲Redux-Saga`call`函數的yield值?

​​

我會在以後進行擴展這個功能來執行異步操作,但我試圖讓事情變得簡單開始。

使用終極版 - 佐賀我試圖做到以下幾點:

export function* requestThingSaga({payload}) { 
    const thing = yield call(fetchThing, payload.thingId) 
    console.log(thing); 
} 

但是當我測試的傳奇,我發現fetchThing不叫:

gen = requestThingSaga({payload: {thingId: 1 }); 
gen.next() // logs 'undefined' 

我不能瞭解發生了什麼事。 call的文檔說可以使用具有正常返回值的函數。我看不出爲什麼這不起作用。有任何想法嗎?

回答

0

redux-saga整點關於製作效果「聲明式」。所以你需要一個解釋器來處理這些效果。 ReduxSaga中間件作爲一個解釋器來執行調用,等待承諾等。否則,它只是一個聲明(在這種情況下)您要調用外部函數。所以你的測試有點像「測試效果解釋器」,它只會斷定你的傳奇沒有實際做某些事情而返回的效果。

gen = requestThingSaga({payload: {thingId: 1 }); 

// test by inspecting .value w/o actuall call 
gen.next().value.should.be.deep.equal(call(fetchThing, 1)) 

// "interprete" call effect by passing a value back 
gen.next({description: 'hi', thing: 1}) 

BTW gen應更好地命名iter :)因爲它是迭代器不是發電機。