https://github.com/dirkluijk/observable-matchers
RxJS Observable Matchers for Jest and Jasmine
https://github.com/dirkluijk/observable-matchers
Last synced: 4 months ago
JSON representation
RxJS Observable Matchers for Jest and Jasmine
- Host: GitHub
- URL: https://github.com/dirkluijk/observable-matchers
- Owner: dirkluijk
- Created: 2019-08-07T00:37:35.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-02-12T11:28:07.000Z (over 4 years ago)
- Last Synced: 2025-04-06T13:36:45.666Z (over 1 year ago)
- Language: TypeScript
- Size: 279 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# RxJS Observable Matchers
> Custom RxJS Observable matchers for Jest and Jasmine
[](https://www.npmjs.com/package/@dirkluijk/observable-matchers)
[](https://www.npmjs.com/package/@dirkluijk/observable-matchers)
[](https://travis-ci.org/dirkluijk/observable-matchers)
[](#contributors-)
## Overview
### What
A small set of test matchers for testing RxJS Observables, compatible with
all versions of [Jasmine](http://jasmine.github.io/) and
[Jest](http://facebook.github.io/jest/).
### Why
When testing simple RxJS observables, [RxJS Marble Testing]() may be too verbose.
This set of test matchers may provide a more simple API and reduce boilerplate code.
### Limitations
The matchers provided in this package only support synchronous streams.
**Testing asynchronous Observables is not (yet) supported!**
## Installation 🌩
##### npm
```
npm install @dirkluijk/observable-matchers --save-dev
```
##### yarn
```
yarn add @dirkluijk/observable-matchers --dev
```
## API 📝
### Asymmetric Matchers (recommended)
```typescript
import { of } from 'rxjs';
import {
next,
completed,
emptyObservable,
completedObservable,
failedObservable,
observable,
observableWithSize
} from '@dirkluijk/observable-matchers';
const completed$ = of(10, 20, 30);
expect(completed$).toEqual(observable(
next(10),
next(20),
next(30),
completed()
));
expect(completed$).not.toEqual(emptyObservable());
expect(completed$).toEqual(completedObservable());
expect(completed$).not.toEqual(failedObservable());
expect(completed$).toEqual(observableWithSize(3));
```
### Matchers
```typescript
import { of } from 'rxjs';
import { next, completed } from '@dirkluijk/observable-matchers';
import '@dirkluijk/observable-matchers/matchers';
const completed$ = of(10, 20, 30);
expect(completed$).toBeObservable([
next(10),
next(20),
next(30),
completed()
]);
expect(completed$).not.toBeEmpty();
expect(completed$).toBeCompleted();
expect(completed$).not.toBeFailed();
expect(completed$).toBeOfSize(3);
```
### Record utility
Sometimes a stream does not replay its events. In order to capture its events,
you can use the provided `record()` function.
```typescript
import { record, emptyObservable } from '@dirkluijk/observable-matchers';
import '@dirkluijk/observable-matchers/matchers';
const recorded$ = record(someStream());
triggerEvents();
expect(recorded$).not.toEqual(emptyObservable());
// or
expect(recorded$).not.toBeEmpty();
```
## Usage 🕹
In order to use the asymmetric matchers (e.g. `toEqual(observable(...))`, `toEqual(completedObservable())`),
you just need to import them as pure functions:
```js
import { completedObservable, observable } from '@dirkluijk/observable-matchers';
```
In order to use the matchers (e.g. `toBeObservable`, `toBeCompleted`), you need
to register the matchers and import the typings as follows:
```js
import '@dirkluijk/observable-matchers/matchers';
```
**Please note that the use of matchers may collide with matchers from other libraries.**
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!