2017-06-19 10 views
0

私はユニットテストを行っています。私はreduxストアの値が自分の指示に従って更新されることをテストしたいと思います。ユニットテストで変数が更新されない

私のmodule reducerユニットテストには複数のテストスイートが含まれていますが、いくつかは状態を更新しているものもあれば、わからないものもあります。だから私はテストと研究の日の後に誰かが私の誤りの理由。どんな提案も感謝しています。ここで

は私のモジュールの減速コードの部分である:ここで

export function createModuleReducer() { 
    return function moduleReducer(state: PageModules = INITIAL_STATE, 
    action): PageModules { 
     if (!action.meta || !action.meta.status) { 
     return state; 
     } 
     switch (action.type) { 
     case INITIALIZE: 

     case CREATE_SIGNATURES_ARRAY: 
      return tassign(state, {signatures: action.payload['document']}); 

は私のモジュールの減速仕様コードの一部です:

にconsole.logを使用して
const baseState = { 
    signatures: [] 
}; 
let state; 
… 
describe('Reducer',() => { 
    … 
    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
    … 
    MockNgRedux.reset(); 
    state = JSON.parse(JSON.stringify(baseState)); 
    })); 

    it('should call CREATE_SIGNATURES_ARRAY reducer', async(() => { 
    const actionCreateSignature = { 
     type: CREATE_SIGNATURES_ARRAY, 
     meta: { status: 'create_signature'}, 
     payload: { 'document': … } 
    }; 
    createModuleReducer()(state, actionCreateSignature); 
    mockNgRedux.dispatch(actionCreateSignature); 
    expect(state.signatures).toEqual(…) 
    })); 
} 

、私はmodule reducerアップデートすることを知っていますそれに応じてストアが、仕様の値は変更されません。

答えて

0

リダクターは、純粋な機能であるため、テストするのが最も簡単な部品であると考えられています。
あなたのレデューサーの実装方法によっては、おそらくTestBedは必要ありません。
おそらくMockNgReduxは必要ありません。 @selectを使用するコンポーネントのテストでのみ使用します。

レデューサーに渡す状態は、レデューサーが責任を負う部分のみでなければなりません。この場合、それはsignatureプロパティですか?だから、おそらくあなたのテストコールは、私はまた、減速がそれを処理する方法を確認するために、あなたの期待する前にconsole.log(state)を置くことをお勧めしたい

createModuleReducer()(state.signatures, actionCreateSignature); 

でなければなりません。

さらにアドバイスをするには、createModuleReducer()メソッドの詳細を知る必要があります。
また、mockNgRedux.dispatch()が正しく表示されません。私が見たすべての呼び出しは、M ockNgRedux(クラス)に静的です。

+0

私はスイッチを含む関数であるcreateModuleReducer機能、と私の答えを更新しました! –

0

リチャード・マツェンとreduxのテストに関するreduxの提案のおかげで問題は解決しました!

私は今、直接createModuleReducerをテスト:

expect(createModuleReducer()(state, actionCreateSignature).signatures).toEqual(…) 
関連する問題