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方法的导入数组中添加了初始状态。
我必须在现有的 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
状态。但是我得到了同样的错误信息。
如何解决这个状态问题?
提前致谢。
我找到了解决问题的方法。
我从
更改了reducerexport const reducers
至
export const reducers: ActionReducerMap<State>
此外,我在beforeEach方法的导入数组中添加了初始状态。