Home Reference Source

src/utils/fromEvent.spec.ts

import {expect} from 'chai';
import EventEmitter from 'eventemitter3';
import {lastValueFrom} from 'rxjs';
import {take, toArray} from 'rxjs/operators';

import {fromEvent} from './fromEvent';

interface Events {
	foo: [number, string];
	bar: [number];
}

describe('utils/fromEvent', () => {
	it('should convert events with more than one argument', async () => {
		const emitter = new EventEmitter<Events>();
		const eventPromise = lastValueFrom(fromEvent(emitter, 'foo').pipe(take(2), toArray()));
		emitter.emit('foo', 5, 'a');
		emitter.emit('foo', 6, 'b');
		expect(await eventPromise).to.eql([[5, 'a'], [6, 'b']]);
	});

	it('should convert events with only one argument', async () => {
		const emitter = new EventEmitter<Events>();
		const eventPromise = lastValueFrom(fromEvent(emitter, 'bar').pipe(take(2), toArray()));
		emitter.emit('bar', 5);
		emitter.emit('bar', 6);
		expect(await eventPromise).to.eql([5, 6]);
	});
});