2017-09-28 15 views
0

既存の角度(バージョン4.3.3)アプリケーションにngrx/store(バージョン4.0.3)を実装する必要があります。angular/ngrx store 4:コンポーネントテストで状態を初期化しない

ため、私はこのエラーメッセージのコンポーネントをテストするために問題を抱えて:私は実装が簡単なはずと思ったこの文書Providing Store for testingを読んだ後

TypeError: undefined is not an object (evaluating 'state.search.results') 

を。私のspecファイルで

私はbeforeEach方法でStoreModuleをインポート:

StoreModule.forRoot ({reducers}), 
... 
store = TestBed.get (Store); 
spyOn (store, 'dispatch').and.callThrough(); 

減速は次のようになります。

import * as fromSearch from './search/search-reducer'; 
export interface State { 
    search: fromSearch.State; 
} 

export const reducers = { 
    search: fromSearch.reducer 
}; 

、ここで検索 - 減速:

export interface State { 
    searchTerms: string; 
    results: []; 
    limit: SearchLimit; 
} 
// Imported: initialState & initalSearchLimitState 
const initialState: State = { 
    searchTerms: '', 
    results:  [initialState], 
    limit:  initalSearchLimitState 
}; 

export function reducer (state = initialState, action: SearchActions.All): State { 
    switch (action.type) { 
    case SearchActions.SEARCH: { 
     return { 
     ...state, 
     searchTerm: action.payload 
     }; 
    } 

    case SearchActions.SEARCH_SUCCESS: { 
     return { 
     ...state, 
     results: action.payload 
     }; 
    } 

    case SearchActions.SEARCH_LIMIT_EXCEEDED: { 
     return { 
     ...state, 
     limit: action.payload 
     }; 
    } 

    default: { 
     return state; 
    } 
    } 
} 

コンポーネントIのメソッドでは、特定のアクションを検索サービスメソッド(HTTP reクエスト):

this._searchService.search (query).subscribe (results => { 
    this._store.dispatch (new SearchActions.SearchSuccess (results.data)); 
}); 

検索サービスはモックサービスです。

このサイトで多くの回答を読んだあと、beforeEachメソッドで特定のアクションをディスパッチしてstate.search.results状態を初期化しようとしました。しかし、私は同じエラーメッセージを受け取りました。

この状態の問題を解決するにはどうすればよいですか?

ありがとうございます。

答えて

0

私の問題の解決策が見つかりました。

Iは

export const reducers 

からさらに

export const reducers: ActionReducerMap<State> 

に減速を変更し、IはbeforeEach法のインポート配列に初期状態を追加しました。

関連する問題