单元测试 – 在Angular2测试中模拟ngrx /存储
发布时间:2020-12-17 07:15:53 所属栏目:安全 来源:网络整理
导读:你可以帮我嘲笑商店吗? 我已经看到 this和 this问题有一个不同的错误. 我在我的一个服务中使用商店,我使用dispatch,select和get store方法. 我在@noelmace建议之后嘲笑了商店,并使用了以下调度程序,reducer和state创建商店: export class ObservableMock i
你可以帮我嘲笑商店吗?
我已经看到 this和 this问题有一个不同的错误. 我在我的一个服务中使用商店,我使用dispatch,select和get store方法. 我在@noelmace建议之后嘲笑了商店,并使用了以下调度程序,reducer和state创建商店: export class ObservableMock implements Observer<any> { closed?: boolean = false; // inherited from Observer nextVal: any = ''; // variable I made up constructor() { } next = (value: any): void => { this.nextVal = value; }; error = (err: any): void => { console.error(err); }; complete = (): void => { this.closed = true; } } let _reducer: ObservableMock = new ObservableMock(); let _dispatcher: ObservableMock = new ObservableMock(); let state$: Observable<any> = new Observable<any>(); 所以我的Mockstore类看起来如下: export class MockStore<T> extends Store<T> { //as given above constructor() { super(_dispatcher,_reducer,state$); } //as given above } 但是,当我尝试按照测试方式定义我的服务时,它说
此失败是由TestedService构造函数中的以下行引起的: constructor(private _store: Store<TabStore>) { let tabStore: Observable<TabStore> = _store.select<TabStore>('myReducer');| } 这是我的测试: beforeEach(() => { TestBed.configureTestingModule({ imports: [ // StoreModule.provideStore({myReducer: myReducer}),],providers: [ {provide: Store,useClass: MockStore},{ provide: TestedService,useFactory: (tabStore: Store<TabStore>): TestedService=> { return new TestedService(myStore); },deps: [Store] } ] }); }); 评论进口也无济于事.有没有人有想法嘲笑有什么问题? 解决方法
最后,我找到了一个模拟商店的解决方案.不确定@maxisam的回答是对还是错,但这里是我用过的解决方案.
let _reducer: ObservableMock = new ObservableMock(); let _dispatcher: ObservableMock = new ObservableMock(); let state$: Observable<any> = new Observable<any>(); export class MockStore<T> extends Store<T> { private _fakeData: Object = {}; private fakeDataSubject: BehaviorSubject<Object> = new BehaviorSubject(this._fakeData); select = <T,R>(mapFn: any,...paths: string[]): Observable<any> => { if (typeof mapFn !== 'function') { mapFn = () => mapFn; } return this.fakeDataSubject.map(mapFn); }; constructor() { super(_dispatcher,state$); } nextMock(mock: Object,...keys: string[]) { let curMockLevel = this._fakeData = {}; keys.forEach((key,idx) => { curMockLevel = curMockLevel[key] = idx === keys.length - 1 ? mock : {}; }); this.fakeDataSubject.next(this._fakeData); } get fakeData() { return this._fakeData; } } 这可以在以后使用如下: {provide: Store,useClass: MockStore} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)
- webservice学习之处理Map等CXF无法自动转化的类型
- 在某个列中更改vim中的背景颜色
- 如果加载了ngAnimate,则会生成AngularJS ngRepeat注??释标记
- 在Angular 2 RC5 / Router 3 RC1中路由嵌套模块
- Scala中如何省略匹配字?
- Angularjs – 通过单击button1(假上传按钮)触发按钮2的单击
- 最全的 Twitter Bootstrap 开发资源清单
- Bootstrap 之 Metronic 模板的学习之路 - (7)GULP 前端自
- 如何在VS CODE调试Angular