如何提供一个Rxjs observable作为使用Jasmine中的combineLatest的方法的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何提供一个Rxjs observable作为使用Jasmine中的combineLatest的方法的数据相关的知识,希望对你有一定的参考价值。
我目前有一个combineLatest
方法,我通过我的班级提供:
export class ObservableDataSource extends DataSource<any> {
private value: any[];
private key: string;
constructor(value: any[], key) {
super();
this.value = value;
this.key = key;
}
connect() {
//Code related to question starts here
return combineLatest(this.value, (data) => {
return data[this.key];
});
//Code related to question ends here
}
disconnect() {}
}
在我的单元测试中,我有一个beforeEach,我用来实例化组件并提供一个observable:
const dummyData = [{
visible: {
data: 'test123'
}
}];
const observableDummyData = Observable.of([dummyData]);
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{provide: ObservableDataSource, useValue: new ObservableDataSource(observableDummyData, 'visible')}
]
});
});
it('should be created', inject([ObservableDataSource], (service: ObservableDataSource) => {
expect(service).toBeTruthy();
}));
唯一的问题是,当查看控制台的业力转轮时,而this.value显示为可观察的,从combineLatest中发出的数据显示为空的TypeError: Cannot read property 'visible' of undefined
。可能的原因:
- 我向
Observable.of
提供错误的数据 - 我正在以错误的方式创建一个observable(我不应该使用observable.of)。
- 我有一个我需要调用的发射器,以便将可观察的数据传递给combineLatest。
- 我没有发现的原因
任何建议,都非常感谢。谢谢。
答案
我认为您的代码中存在多个问题。
1.您的服务期望其value
参数是一个数组,但您提供的是一个简单的Observable。
2 combineLatest
使用多个可观察参数,而不是参数数组。
return combineLatest(obsA, obsB, obsC, (a, b, c) => { ... });
// or with the spreading operator
return combineLatest(...arrayOfObs).map((...data) => { ... });
代码示例(未测试)
Dummy data
const dummyData1 = [{
visible: {
data: 'test123'
}
}];
const dummyData2 = [{
visible: {
data: 'somethingElse'
}
}];
const observableDummyData = [
Observable.of(dummyData1),
Observable.of(dummyData2),
];
combineLatest
见documentation for spreading operator
connect() {
return combineLatest(...this.value).pipe(
map(...data) => {
return data[this.key]
}
);
}
以上是关于如何提供一个Rxjs observable作为使用Jasmine中的combineLatest的方法的数据的主要内容,如果未能解决你的问题,请参考以下文章
在 RxJS Observable 中“展平”数组的最佳方法
如何在RXJS 6.3.3中使用ForkJoin导入Observer?
Rxjs:使用 scan 或 mergeMap 或任何 rxjs 在 X 秒后将 observables 数据流(grpc 服务)组合成一个数组
如何在 Angular 4 中推送到数组的 Observable? RxJS