UNPKG

event-emitters

Version:
70 lines 2.84 kB
import { QueueingEventEmitter } from '.'; describe('QueueingEventEmitter', () => { const createEventEmitter = () => new QueueingEventEmitter(); let emitter = createEventEmitter(); beforeEach(() => { emitter = createEventEmitter(); }); it('queues messages when there are no subscribers and emits them to first subscriber', () => { const subscriber = jest.fn(); emitter.emit('one'); emitter.emit('two'); emitter.subscribe(subscriber); expect(subscriber.mock.calls).toEqual([['one'], ['two']]); }); it('stops queueing messages when there is a subscriber', () => { const subscriber = jest.fn(); emitter.emit('one'); emitter.emit('two'); emitter.subscribe(subscriber); expect(subscriber.mock.calls).toEqual([['one'], ['two']]); emitter.emit('three'); expect(subscriber.mock.calls).toEqual([['one'], ['two'], ['three']]); }); it('resumes queueing message when it loses all subscribers', () => { const subscriber1 = jest.fn(); const subscriber2 = jest.fn(); emitter.emit('one'); emitter.emit('two'); emitter.subscribe(subscriber1); emitter.subscribe(subscriber2); expect(subscriber1.mock.calls).toEqual([['one'], ['two']]); expect(subscriber2).toHaveBeenCalledTimes(0); emitter.emit('three'); expect(subscriber1.mock.calls).toEqual([['one'], ['two'], ['three']]); expect(subscriber2.mock.calls).toEqual([['three']]); emitter.unsubscribe(subscriber1); emitter.emit('four'); expect(subscriber1).toHaveBeenCalledTimes(3); expect(subscriber2.mock.calls).toEqual([['three'], ['four']]); emitter.unsubscribe(subscriber2); emitter.emit('five'); emitter.emit('six'); const subscriber3 = jest.fn(); emitter.subscribe(subscriber3); expect(subscriber3.mock.calls).toEqual([['five'], ['six']]); emitter.emit('seven'); expect(subscriber3.mock.calls).toEqual([['five'], ['six'], ['seven']]); }); it('re-throws the final error when the subscriber throws during queue drain', () => { const subscriber1 = jest .fn() .mockImplementationOnce(() => { throw new Error('1'); }) .mockImplementationOnce(() => { throw new Error('2'); }); emitter.emit('one'); emitter.emit('two'); emitter.emit('three'); expect(() => { emitter.subscribe(subscriber1); }).toThrow('2'); // make sure the queue is drained const subscriber2 = jest.fn(); emitter.subscribe(subscriber2); expect(subscriber2).toHaveBeenCalledTimes(0); }); }); //# sourceMappingURL=QueueingEventEmitter.spec.js.map