通常のブログ(投稿コメント用のAPIからデータを取得する)の例を使用して、reduxレイヤーをテストでカバーする方法を示します。 ソースはこちらから入手できます 。
別のアクションとレデューサーの代わりに、アプリケーションでのreduxの開発とテストの両方を大幅に簡素化するducks-patternを使用します。 また、非常に便利なツール-redux-actを使用しますが、createAction()メソッドの説明フィールドに数字、大文字、アンダースコア( 証拠 )のみを追加することが重要です。
まず、タイプ{ type, payload }
単純な「アクションクリエーター」のテストはapp.setLoading()です。
最初のテスト実行の最小:
expectedActionsの値をコンソールからコピーします。
const expectedActions = [{ type: 'APP__SET', payload: true }]; expect(actions).toEqual(expectedActions);
composeReducers()から取得したルートレデューサーにアクション(各アクションのペイロードにデータを含む)を適用します。
actions.forEach(action => { state = reducer(state, action) }) expect(state).toEqual({ ...state, app: { ...state.app, isLoading: true }, })
ストアがコールバック関数mockStore(() => state)
作成されることを明確にする必要がありますmockStore(() => state)
-thunkの副作用内でgetState()
呼び出すときに現在の状態を保証しgetState()
。
以上で、最初のテストの準備は完了です!
さらに興味深いことに、テストで副作用post.load()をカバーする必要があります。
comments.load()もエクスポートされますが、個別にテストするのはあまり意味がありません。 post.load()内でのみ使用されます。
副作用テスト:
より良い方法はわかりませんが、ルーターレデューサーを初期化するために、reducerMockでルートレデューサーを再構築する必要がありました。 さらに、2つのaxiosリクエストに対応します。 store.dispatch()にさらに戻り値が追加されました。 Promiseに包まれた; しかし、代替があります-done()コールバック関数:
it('', done => { setTimeout(() => {
それ以外の場合、副作用のテストは、単純な「アクション作成者」のテストほど複雑ではありません。 ソースはこちらから入手できます 。