Testing 如何在rxjs中测试连接流
给定的类有一个返回缓存流的方法,但该流可以由另一个私有热流触发,该私有热流使缓存流发出一个新值 班级Testing 如何在rxjs中测试连接流,testing,rxjs,rxjs-marbles,Testing,Rxjs,Rxjs Marbles,给定的类有一个返回缓存流的方法,但该流可以由另一个私有热流触发,该私有热流使缓存流发出一个新值 班级 export class SomeClass { private cache: Observable<number>; private trigger$ = new Subject(); private multiply = 1; constructor(private num: number) {} getNumber(): Observable<nu
export class SomeClass {
private cache: Observable<number>;
private trigger$ = new Subject();
private multiply = 1;
constructor(private num: number) {}
getNumber(): Observable<number> {
return (
this.cache ||
(this.cache = concat(of(void 0), this.trigger$).pipe(
switchMap(() => of(this.num * this.multiply++)),
shareReplay(1)
))
);
}
trigger(): void {
this.trigger$.next();
}
}
例如:
UPD:这里的问题似乎是不可能模拟trigger$
属性
看起来是这样的
it("trigger updates", () => {
testScheduler.run(({ hot, expectObservable }) => {
spyOnProperty(someClass, 'trigger$', 'get').and.returnValue(hot('^--b--c'));
const num$ = someClass.getNumber();
expectObservable(num$).toBe("a--b--c", { a: 3, b: 6, c: 9 });
});
});
但是必须以这种方式更改触发器$
属性
get trigger$() {
return new Subject();
}
例如:
get trigger$() {
return new Subject();
}