Skip to content

Commit

Permalink
error creator
Browse files Browse the repository at this point in the history
  • Loading branch information
nmuldavin committed Dec 3, 2017
1 parent f07064a commit 8762d8f
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
27 changes: 27 additions & 0 deletions src/error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Creates an observable that immediately terminates with the provided error
*
* @example
* error('error message').subscribe({ error: console.log }) // logs 'error message'
*
* @example
* // rejecting a certain case
* stream
* .filter(specificCase)
* .flatMap(value => Observable.error(value))
* .subscribe(observer)
*
* @param {*} e Error value
* @return {Observable} New Observable
*/
function error(e) {
const Constructor = this || Observable;

return new Constructor(observer => {
observer.error(e);
});
}

error._name = 'error';

export default error;
4 changes: 3 additions & 1 deletion src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import addCreators from './addCreators';
import catchError from './catchError';
import debounce from './debounce';
import defer from './defer';
import error from './error';
import filter from './filter';
import flatMap from './flatMap';
import forEach from './forEach';
Expand All @@ -19,7 +20,7 @@ import toArray from './toArray';
import transform from './transform';

const addAll = (target = Observable) => {
addCreators(target, [defer, fromEvent, fromPromise, interval]);
addCreators(target, [defer, error, fromEvent, fromPromise, interval]);

addOperators(target.prototype, [
catchError,
Expand All @@ -44,6 +45,7 @@ export {
catchError,
debounce,
defer,
error,
filter,
flatMap,
forEach,
Expand Down
18 changes: 18 additions & 0 deletions test/error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { expect } from 'chai';
import sinon from 'sinon';
import error from '../src/error';
import apiCheck from './common/apiCheck';

describe('(Creator) error', () => {
apiCheck(error);

it('should return an Observable', () => {
expect(error(Promise.resolve())).to.be.an.instanceOf(Observable);
});

it('should trigger an Observable error event with the provided value', () => {
const observer = { error: sinon.spy() };
error('error').subscribe(observer);
expect(observer.error).to.have.been.calledWith('error');
});
});

0 comments on commit 8762d8f

Please sign in to comment.