rxjs-subscription-count
v1.0.1
Published
subscriptionCount operator for RxJS - Count subscriptions to observables. Useful for testing observable flattening strategies.
Downloads
366
Maintainers
Readme
subscriptionCount
operator for RxJS
rxjs-subscription-count
Count subscriptions to observables. Useful for testing Observable
flattening strategies.
Installation
Install using NPM CLI
npm install --save rxjs-subscription-count
or using Yarn CLI
yarn add rxjs-subscription-count
Use cases
Test that the subscriptions are switched (switchMap
or switchAll
) correctly
to prevent memory leaks and race conditions.
Usage
import { BehaviorSubject, empty } from 'rxjs';
import { subscriptionCount } from 'rxjs-subscription-count';
const counter: BehaviorSubject<number> = new BehaviorSubject(0);
const source: Observable<never> = empty().pipe(
subscriptionCount(counter),
);
switchMap
test case
import {
BehaviorSubject,
interval,
Observable,
range,
Subscription,
} from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { subscriptionCount } from './subscription-count';
describe('switchMap', () => {
it('keeps a single subscription', () => {
const threeValues: Observable<number> = range(1, 3);
const subscriptionCounter: BehaviorSubject<number> = new BehaviorSubject(0);
const infiniteValues: Observable<number> = interval(0).pipe(
subscriptionCount(subscriptionCounter),
);
const subscription: Subscription = threeValues.pipe(
switchMap(() => infiniteValues),
).subscribe();
expect(subscriptionCounter.value).toBe(1);
subscription.unsubscribe();
});
});
mergeMap
test case
import {
BehaviorSubject,
interval,
Observable,
range,
Subscription,
} from 'rxjs';
import { mergeMap } from 'rxjs/operators';
import { subscriptionCount } from './subscription-count';
describe('mergeMap', () => {
it('results in a subscription per emitted value', () => {
const threeValues: Observable<number> = range(1, 3);
const subscriptionCounter: BehaviorSubject<number> = new BehaviorSubject(0);
const infiniteValues: Observable<number> = interval(0).pipe(
subscriptionCount(subscriptionCounter),
);
const subscription: Subscription = threeValues.pipe(
mergeMap(() => infiniteValues),
).subscribe();
expect(subscriptionCounter.value).toBe(3);
subscription.unsubscribe();
});
});