angular / ngrx store 4: 未初始化组件测试中的状态

angular / ngrx store 4: Uninitialize state in component test

我必须在现有的 angular(版本 4.3.3)应用程序中实施 ngrx/store(版本 4.0.3)。

由于此错误消息,我无法测试组件:

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

看完这篇文档后Providing Store for testing我觉得实现应该很容易。

在我的规范文件中,我在 beforeEach 方法中导入了 StoreModule:

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

reducer 看起来像:

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;
    }
  }
}

在组件的方法中,我在搜索服务方法(HTTP 请求)的订阅中分派特定操作:

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

在规范文件中,搜索服务是模拟服务。

在阅读了本网站上的大量答案后,我尝试在 beforeEach 方法中调度特定操作以初始化 state.search.results 状态。但是我得到了同样的错误信息。

如何解决这个状态问题?

提前致谢。

我找到了解决问题的方法。

我从

更改了reducer
export const reducers

export const reducers: ActionReducerMap<State>

此外,我在beforeEach方法的导入数组中添加了初始状态。