Использование конвейерных операторов и подписка только на «внутреннюю» наблюдаемую - PullRequest
1 голос
/ 23 мая 2019

Предположим, у вас есть следующий код:

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 с использованием конвейерных операторов и последующая подписка на наблюдаемую «исход» также подписывается на наблюдаемую «происхождение».

Pipeable Operator по сути является чистой функцией, которая принимает одну 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);
}));
...