【问题标题】:angular / ngrx store 4: Uninitialize state in component testangular / ngrx store 4:在组件测试中取消初始化状态
【发布时间】:2017-09-28 19:06:59
【问题描述】:

我必须在现有的 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 状态。但我得到了同样的错误信息。

如何解决这个状态问题?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    我将减速器从

    export const reducers
    

    export const reducers: ActionReducerMap<State>
    

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

    【讨论】:

    • 你能解释更多吗?或者你有在你的规范文件中设置初始状态的代码吗?
    • 对不起,我去年完成了这个项目,我不拥有源代码。如果您在测试和初始状态方面遇到问题,可以查看此链接:toddmotto.com/ngrx-store-testing-reducers。这是一个如何测试的简单说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多