diff --git a/src/decorators/select.spec.ts b/src/decorators/select.spec.ts index 21af0f9..1ba2f40 100644 --- a/src/decorators/select.spec.ts +++ b/src/decorators/select.spec.ts @@ -9,6 +9,7 @@ import 'rxjs/add/operator/map'; import { NgRedux } from '../components/ng-redux'; import { RootStore } from '../components/root-store'; import { select, select$ } from './select'; +import { map } from 'rxjs/operators'; interface IAppState { foo: string; @@ -158,18 +159,49 @@ describe('Select decorators', () => { describe('@select$', () => { const transformer = (baz$: Observable) => baz$.map(baz => 2 * baz); - it('applies a transformer to the observable', done => { - class MockClass { - @select$('baz', transformer) - baz$: Observable; - } - const mockInstance = new MockClass(); + describe('when passed a string', () => { + it('applies a transformer to the observable', done => { + class MockClass { + @select$('baz', transformer) + baz$: Observable; + } + const mockInstance = new MockClass(); + + mockInstance.baz$ + .take(2) + .toArray() + .subscribe( + values => expect(values).toEqual([-2, 10]), undefined, done); + ngRedux.dispatch({ type: 'nvm', payload: 5 }); + }); + }); + + describe('when passed a function', () => { + + const toStringTrans = (baz$: Observable): Observable => + baz$.pipe( + map((baz: number) => 2 * baz), + map((baz: number) => '' + baz) + ); - mockInstance.baz$ - .take(2) - .toArray() - .subscribe(values => expect(values).toEqual([-2, 10]), undefined, done); - ngRedux.dispatch({ type: 'nvm', payload: 5 }); + const selector = function (state: IAppState): number { + return state.baz; + }; + + it('applies a transformer to the observable', done => { + class MockClass { + @select$(selector, toStringTrans) + baz$: Observable; + } + const mockInstance = new MockClass(); + + mockInstance.baz$ + .take(2) + .toArray() + .subscribe( + values => expect(values).toEqual(['-2', '10']), undefined, done); + ngRedux.dispatch({ type: 'nvm', payload: 5 }); + }); }); describe('when passed a comparator', () => { diff --git a/src/decorators/select.ts b/src/decorators/select.ts index 413a3c2..089ece9 100644 --- a/src/decorators/select.ts +++ b/src/decorators/select.ts @@ -57,9 +57,9 @@ export function select( * } * ``` */ -export function select$( - selector: Selector, - transformer: Transformer, +export function select$( + selector: Selector, + transformer: Transformer, comparator?: Comparator ): PropertyDecorator { return decorate(selector, transformer, comparator);