rxjs-to-async-iterator
Convert RxJS Observable streams to async iterators (for RxJS 5.0+)
IMPORTANT: This library only supports RxJS 5.x (still in beta as of this writing).
Looking for RxJS 4.x support? Try rx-to-async-iterator. (Same name but replace 'rxjs' with 'rx'.)
This module is primarily intended for use in testing more complex RxJS-based async sequences, though that doesn't preclude other use cases.
It is intended for use with mocha for testing as modified by co-mocha for coroutine/generator support.
Installation
NPM
npm install --save rxjs-to-async-iterator
Usage
require('co-mocha');
const Rx = require('rxjs');
const chai = require('chai');
const expect = chai.expect;
require('rxjs-to-async-iterator');
// Side effect: Adds methods to Rx.Observable prototype.
describe('some examples', () => {
it('can verify that an Observable generates a predetermined sequence of values', function *() {
const iter = Rx.Observable.of([42, 45]).toAsyncIterator();
expect(yield iter.nextValue()).to.equal(42);
// Will throw if error or complete are produced.
expect(yield iter.nextValue()).to.equal(45);
yield iter.shouldComplete();
// Will throw if next or error are produced.
iter.unsubscribe();
// Use this if ending the test before the Observable terminates and you
// want to ensure proper resource cleanup. This is not necessary if you
// reach an onComplete or onError state in a successful test.
});
it('has a shortcut form for an Observable that produces a single value', function *() {
expect(yield Rx.Observable.of(47).shouldGenerateOneValue()).to.equal(47);
// Will throw if any sequence other than next(47), complete() is produced.
});
it('has a shortcut form for an Observable that produces no values', function *() {
expect(yield Rx.Observable.empty(47)).shouldBeEmpty();
// Will throw if next or error are produced.
});
it('can verify that an Observable generates an error', function *() {
const iter = Rx.Observable.throw(new Error('expected failure')).toAsyncIterator();
expect((yield iter.shouldThrow()).message).to.equal('expected failure');
});
it('has a shortcut form for an Observable that only generates an Error', function *() {
const obs = Rx.Observable.throw(new Error('expect this fail'));
expect((yield obs.shouldThrow()).message).to.equal('expect this fail');
});
});
License
MIT