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]); + }); +});