2017-07-17 29 views
0

JestとReduxを初めて使用し、ストアにディスパッチするが戻り値を返さない関数のテストに問題があります。 「:プロパティを読み取ることができません 『し、』未定義の例外TypeError」このRedux - Jest:void戻り値を持つテスト関数

return store.dispatch(actions.fetchTodos()).then(() => { 
     // return of async actions 
     expect(store.getActions()).toEqual(expectedActions) 
}) 

しかし、私はエラーが発生し、何も返さない、いくつかの「fetchtodos」の機能を持っていない私はRedux websiteからの例に従うことをしようとしています未定義のため返されます。私のモックストアが正しくアップデートされていることをテストするために何ができるのだろうかと思います。関数をディスパッチして終了するのを待ってから、模擬ストアと期待される結果を比較する方法はありますか?

おかげ

編集:私たちはtypescriptです

を使用している

アクションTSX

export function selectTopic(topic: Topic | undefined): (dispatch: Redux.Dispatch<TopicState>) => void { 
    return (dispatch: Redux.Dispatch<TopicState>): void => { 

    dispatch({ 
     type: SELECT_Topic, 
     payload: topic, 
    }); 

    dispatch(reset(topic)); 
    }; 
} 

test.tsx

const middlewares = [thunk]; 
const mockStore = configureMockStore(middlewares); 

describe('Select Topic action',() => { 
    it('should create an action to select .',() => { 
    const topic: Topic = mockdata.example[0]; 
    const expectedAction = { 
     type: actions.SELECT_TOPIC, 
     payload: topic, 
    }; 

    const store = mockStore(mockdata.defaultState); 

    return store.dispatch(actions.selectTopic(topic)).then(() => { 
     expect(store.getState()).toEqual(expectedAction); 
    }); 
    }); 
}); 

からアクションは、私がテストするために与えられてるものです(そしてそれに似た他の多くの関数があります。テストコードを実行するときにその未定義のエラーが発生しています。関数が何も返さない。

答えて

0

Reduxでは、ストアのdispatchメソッドは、その動作を変更するミドルウェアを添付しない限り、同期します。つまり、約束を返します。

これは、設定の問題を少なくする可能性があります。本番環境で約束パターンを使用できるようにするミドルウェアと同じテスト・ストアを設定していることを確認してください。

いつものように、テストでapi呼び出しを行わないようにするには、ネットワーク要求を必ず模擬してください。

+0

お返事ありがとうございます。そのため、私たちのコードベースにReduxThunkミドルウェアが適用されていました。私はredux-mock-storeライブラリを使用していて、このミドルウェアでmockstoreを設定しています。より一般化されたコードで私のクエストを更新する瞬間を与えてください。 – Exuro

関連する問題