From 10176478b608327d7e0749b60ed746e8101f6297 Mon Sep 17 00:00:00 2001 From: Dustin Cleveland Date: Sat, 25 Mar 2017 10:58:39 -0500 Subject: [PATCH 1/3] Fix #3 --- src/angular2-pubsub.service.spec.ts | 4 ++-- src/angular2-pubsub.service.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/angular2-pubsub.service.spec.ts b/src/angular2-pubsub.service.spec.ts index 9170edd..554094c 100644 --- a/src/angular2-pubsub.service.spec.ts +++ b/src/angular2-pubsub.service.spec.ts @@ -33,8 +33,8 @@ describe('PubSubService', (): void => { expect(pubService.$pub.bind(undefined)).toThrow(); }); - it('should throw an error when event is not registered', (): void => { - expect(pubService.$pub.bind('not-registered')).toThrow(); + it('should do nothing when an event is not registered', (): void => { + expect(() => pubService.$pub('not-registered')).not.toThrow(); }); it('should publish with parameters if the event is registered', (): void => { diff --git a/src/angular2-pubsub.service.ts b/src/angular2-pubsub.service.ts index 976a3f6..fd4eb35 100644 --- a/src/angular2-pubsub.service.ts +++ b/src/angular2-pubsub.service.ts @@ -35,7 +35,7 @@ export class PubSubService implements IPubSubService { if (!event) { throw new Error(`[${ServiceName}] => Publish method must get event name.`); } else if (!this.events[event]) { - throw new Error(`[${ServiceName}] => No recorded events found for ${event}.`); + return; } this.events[event].next(eventObject); From 16e2f5c51f61fef30f8dceece0a4908988e940d9 Mon Sep 17 00:00:00 2001 From: Dustin Cleveland Date: Sat, 25 Mar 2017 11:13:26 -0500 Subject: [PATCH 2/3] Replace tests using .bind() with arrow functions so that parameters are passed as method arguments instead of setting 'this'. --- src/angular2-pubsub.service.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/angular2-pubsub.service.spec.ts b/src/angular2-pubsub.service.spec.ts index 554094c..6d2feaf 100644 --- a/src/angular2-pubsub.service.spec.ts +++ b/src/angular2-pubsub.service.spec.ts @@ -12,7 +12,7 @@ describe('PubSubService', (): void => { describe('$sub', (): void => { it('should throw an error when event is falsy', (): void => { - expect(pubService.$sub.bind(undefined)).toThrow(); + expect(() => pubService.$sub(undefined)).toThrow(); }); it('should return an observable when there is no callback', (): void => { @@ -30,7 +30,7 @@ describe('PubSubService', (): void => { describe('$pub', (): void => { it('should throw an error when event is falsy', (): void => { - expect(pubService.$pub.bind(undefined)).toThrow(); + expect(() => pubService.$pub(undefined)).toThrow(); }); it('should do nothing when an event is not registered', (): void => { From aee0bd603ee9963bce4f676771fbfc67a8642a2e Mon Sep 17 00:00:00 2001 From: Dustin Cleveland Date: Sat, 25 Mar 2017 11:32:18 -0500 Subject: [PATCH 3/3] Replace BehaviorSubject with ReplaySubject which will prevent a default value being emitted when first subscribing to an event. --- src/angular2-pubsub.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/angular2-pubsub.service.ts b/src/angular2-pubsub.service.ts index fd4eb35..c7c1e79 100644 --- a/src/angular2-pubsub.service.ts +++ b/src/angular2-pubsub.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { BehaviorSubject } from 'rxjs/BehaviorSubject'; +import { ReplaySubject } from 'rxjs/ReplaySubject'; import { Observable } from 'rxjs/Observable'; import { Subscription } from 'rxjs/Subscription'; @@ -21,7 +21,7 @@ export class PubSubService implements IPubSubService { } if (this.events[event] === undefined) { - this.events[event] = new BehaviorSubject(0); + this.events[event] = new ReplaySubject(); } if (typeof callback !== 'function') {