使用管道运算符并仅订阅“内部”可观察到的

时间:2019-05-23 19:36:30

标签: angular observable rxjs6 rxjs-pipeable-operators

假设您具有以下代码:

protected _state = new ReplaySubject<CartState>();

getTransformedState(id: number) {
    return this._state.pipe(map(({ items }) => items[id]));
}

然后我将这个转换后的Observable放入另一个组件中,我订阅了它。

ngOnInit() {
    this.cart.getTransformedState(this.product.id).pipe(takeUntil(this.destroy$)).subscribe((item) => {})
}

深入Rxjs文档中,我们可以看到,通过使用管道运算符来转换一个Observable,然后订阅“结果” observable也订阅了“原始” observable。

  

Pipeable运算符本质上是一个纯函数,它将一个Observable作为输入并生成另一个Observable作为输出。 订阅输出Observable也将订阅输入Observable。

我的问题来自项目中提供的未能完成的单元测试

it('should have one subscription for product cart item', async(() => {
    const mockSubject = ServiceMock.getItemUpdates(MockProduct);

    component.ngOnInit();
    fixture.detectChanges();

    expect(mockSubject['observers'].length).toEqual(1);
}));

0 个答案:

没有答案