2017-06-08 1 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' 

私はできない私は、次の操作を実行しようとしてるReduxの-佐賀を使用して

何が起こっているのか理解する。 callのドキュメントでは、通常の戻り値を持つ関数を使用できると述べています。なぜこれがうまくいかないのか分かりません。何か案は?

答えて

0

redux-sagaの全体のポイントは、効果を作り出すことです。"宣言的"です。したがって、これらの効果を処理する通訳が必要です。 ReduxSagaミドルウェアは、通話の呼び出し、待っている通訳などの通訳の役割を果たします。それ以外の場合は、(この場合は)外部関数を呼び出す宣言にすぎません。だからあなたのテストはちょうど実際に何か "実際"をして、あなたのサガが返す効果について何かをアサートするちょうど "テスト効果インタプリタ"です。ところでgenが良くiter名前を付ける必要があります:)それはイテレータないジェネレータであるため、

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}) 

関連する問題