如何解决NgRx:如何模拟存储选择函数以返回不同的值
我在我的角度应用程序中使用NgRx Store进行状态管理。
在init函数中,我通过如下选择器初始化数据:
ngOnInit() {
this.store.select(getData1).subscribe((result) => {
this.data1 = result;
});
this.store.select(getData2).subscribe((result) => {
this.data2 = result;
});
}
在测试案例中,我嘲笑了商店并进行了如下检查:
let storeMock = {
select(): Observable<any> {
return of([{key:'data1',value:'data1'}])
}
}
beforeAll(async(() => {
TestBed.configureTestingModule({
providers:[{ provide: Store,useValue: storeMock }]
});
测试用例:
it('ngOnInit',() => {
component.ngOnInit();
expect(component.data1.key).toBe('data1');
expect(component.data2.key).toBe('data2'); // in both cases it returns data1 as we have mocked only data 1
});
这里的问题是我从select
模拟了Store
方法,但是每次我都无法返回不同的值,因为我在ngOnInit
中两次调用了选择器,但是由于模拟了它带有数据的两个选择器返回相同的数据。
有什么办法,我可以在不同的时间返回不同的模拟数据(通过某些参数或调用选择器的顺序,例如第一次返回不同的数据,第二次返回不同的数据)
解决方法
请考虑使用@ngrx/store/testing
中的测试实用程序。
let mockStore: MockStore<MyState>;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
provideMockStore(),],});
mockStore = TestBed.get(Store);
mockStore.overrideSelector(getData1,{key:'data1',value:'data1'});
mockStore.overrideSelector(getData2,{key:'data2',value:'data2'});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。