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();
  }