From ae58cb90ddc18a539a7493b72d6afbb51ed07393 Mon Sep 17 00:00:00 2001 From: Sergii Stotskyi Date: Mon, 31 Oct 2016 20:25:32 +0200 Subject: [PATCH] refactor(events): passes arguments as function arguments to subscriber Also add tests for Events service Fixes 7314 --- src/util/events.ts | 2 +- src/util/test/events.spec.ts | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/util/test/events.spec.ts diff --git a/src/util/events.ts b/src/util/events.ts index 5c01fa1fec..a6153c4558 100644 --- a/src/util/events.ts +++ b/src/util/events.ts @@ -100,7 +100,7 @@ export class Events { let responses: any[] = []; t.forEach((handler: any) => { - responses.push(handler(args)); + responses.push(handler(...args)); }); return responses; } diff --git a/src/util/test/events.spec.ts b/src/util/test/events.spec.ts new file mode 100644 index 0000000000..6b569fba4f --- /dev/null +++ b/src/util/test/events.spec.ts @@ -0,0 +1,39 @@ +import { Events } from '../events'; + +fdescribe('Events service', () => { + let events: Events; + let listener: jasmine.Spy; + + beforeEach(() => { + events = new Events(); + }); + + it('should call listener when event is published', () => { + const eventParams = [{}, {}, {}]; + + listener = jasmine.createSpy('listener'); + events.subscribe('test', listener); + events.publish('test', ...eventParams); + + expect(listener).toHaveBeenCalledWith(...eventParams); + }); + + it('should unsubscribe listener', () => { + listener = jasmine.createSpy('listener'); + events.subscribe('test', listener); + events.unsubscribe('test', listener); + + expect(listener).not.toHaveBeenCalled(); + }); + + it('should return an array of responses when event is published', () => { + const [response, anotherResponse] = [{}, {}]; + const listener = jasmine.createSpy('listener').and.returnValue(response); + const anotherListener = jasmine.createSpy('anotherListener').and.returnValue(anotherResponse); + + events.subscribe('test', listener, anotherListener); + const responses = events.publish('test'); + + expect(responses).toEqual([response, anotherResponse]); + }); +});