Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/layzeedk/rxjs-subscription-count
subscriptionCount operator for RxJS - Count subscriptions to observables. Useful for testing.
https://github.com/layzeedk/rxjs-subscription-count
rxjs rxjs-subscriptions rxjs6
Last synced: about 2 months ago
JSON representation
subscriptionCount operator for RxJS - Count subscriptions to observables. Useful for testing.
- Host: GitHub
- URL: https://github.com/layzeedk/rxjs-subscription-count
- Owner: LayZeeDK
- Created: 2018-08-03T23:58:06.000Z (over 6 years ago)
- Default Branch: develop
- Last Pushed: 2022-03-02T23:01:07.000Z (almost 3 years ago)
- Last Synced: 2024-10-30T11:20:16.882Z (2 months ago)
- Topics: rxjs, rxjs-subscriptions, rxjs6
- Language: TypeScript
- Size: 186 KB
- Stars: 6
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
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
```typescript
import { BehaviorSubject, empty } from 'rxjs';
import { subscriptionCount } from 'rxjs-subscription-count';const counter: BehaviorSubject = new BehaviorSubject(0);
const source: Observable = empty().pipe(
subscriptionCount(counter),
);
```## `switchMap` test case
```typescript
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 = range(1, 3);
const subscriptionCounter: BehaviorSubject = new BehaviorSubject(0);
const infiniteValues: Observable = interval(0).pipe(
subscriptionCount(subscriptionCounter),
);const subscription: Subscription = threeValues.pipe(
switchMap(() => infiniteValues),
).subscribe();expect(subscriptionCounter.value).toBe(1);
subscription.unsubscribe();
});
});
```## `mergeMap` test case
```typescript
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 = range(1, 3);
const subscriptionCounter: BehaviorSubject = new BehaviorSubject(0);
const infiniteValues: Observable = interval(0).pipe(
subscriptionCount(subscriptionCounter),
);const subscription: Subscription = threeValues.pipe(
mergeMap(() => infiniteValues),
).subscribe();expect(subscriptionCounter.value).toBe(3);
subscription.unsubscribe();
});
});```