2017-01-16 27 views
0

私はJestでテストしたい次のスーパー単純Redux-Sagaを持っています。redux-saga takeEveryのテスト

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

は私がRedux-Sagas-Test-Planを見てきましたが、それは唯一の佐賀効果クリエーターが含まれており、佐賀のヘルパーをサポートしていないようですユニットテスト機能にあなたをできるようにするようです。 Redux-Saga-Testもありますが、結果としてもたらされる効果についてはdeepEqualを実行するだけで、矢印機能はテストされません。

私ができることを望むのは、次の2つのオブジェクトをtakeEveryに過ぎ、次のケースでのみnextApiSagaが呼び出されることです。

{ type: 'foo' } 

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

こんにちは、David。 redux-saga-test-planはサガヘルパーを長い間支えてきました。 [Saga Helpers](http://redux-saga-test-plan.jeremyfairbank.com/unit-testing/saga-helpers.html)でドキュメントを見逃している可能性があります。 – jfairbank

答えて

1

私はあなたにReduxの-佐賀テスト計画は、佐賀ヘルパーのための方法を持っていることについてのコメントを残していますが、簡単にそれを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) 
})