angular / ngrx store 4:在组件测试中取消初始化状态

时间:2017-09-28 19:07:00

标签: angular unit-testing ngrx-store-4.0

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

由于此错误消息,我在测试组件时遇到问题:

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

阅读本文档后Providing Store for testing我认为实施应该很容易。

在我的spec文件中,我在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));
});

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

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

如何解决此状态问题?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

我从

更改了reducer
export const reducers

export const reducers: ActionReducerMap<State>

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