@servie/events
Version:
Tiny type-safe event emitter
88 lines • 3.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
describe("events", () => {
it("should emit events", () => {
const events = new index_1.Emitter();
const spy = jest.fn();
const off = events.on("test", spy);
events.emit("test", true);
off();
events.emit("test", false);
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenLastCalledWith(true);
});
it("should remove function only once", () => {
const events = new index_1.Emitter();
const spy = jest.fn();
const off1 = events.on("test", spy);
const off2 = events.on("test", spy);
events.emit("test", true);
expect(spy).toHaveBeenCalledTimes(2);
expect(off1()).toEqual(true);
expect(off1()).toEqual(false);
events.emit("test", true);
expect(spy).toHaveBeenCalledTimes(3);
off2();
events.emit("test", false);
expect(spy).toHaveBeenCalledTimes(3);
});
it("should emit `ALL_EVENTS` event", () => {
const events = new index_1.Emitter();
const spy = jest.fn();
events.emit("test", false);
expect(spy).not.toHaveBeenCalled();
const off = events.on(index_1.ALL_EVENTS, spy);
events.emit("test", true);
expect(spy).toHaveBeenCalledTimes(1);
off();
events.emit("test", false);
expect(spy).toHaveBeenCalledTimes(1);
});
it("should forward `ALL_EVENTS` events easily", () => {
const events1 = new index_1.Emitter();
const events2 = new index_1.Emitter();
const spy = jest.fn();
events2.on(index_1.ALL_EVENTS, ({ type, args }) => {
events1.emit(type, ...args);
});
events1.on("test", spy);
events2.emit("test", true);
expect(spy).toHaveBeenLastCalledWith(true);
});
it("should filter `ALL_EVENTS` events easily", () => {
const events1 = new index_1.Emitter();
const events2 = new index_1.Emitter();
const spy = jest.fn();
events1.on(index_1.ALL_EVENTS, (e) => {
if (e.type === "test") {
events2.emit(e.type, ...e.args);
}
});
events2.on("test", spy);
events1.emit("test", true);
events1.emit("other", "");
expect(spy).toHaveBeenLastCalledWith(true);
});
});
describe("once", () => {
it("should support a once listener", () => {
const events = new index_1.Emitter();
const spy = jest.fn();
index_1.once(events, "test", spy);
events.emit("test", true);
events.emit("test", false);
expect(spy).toHaveBeenCalledTimes(1);
});
it("should not break emitter by removing element within listener", () => {
const events = new index_1.Emitter();
const onSpy = jest.fn();
const onceSpy = jest.fn();
index_1.once(events, "test", onceSpy);
events.on("test", onSpy);
events.emit("test", true);
expect(onSpy).toHaveBeenCalledTimes(1);
expect(onceSpy).toHaveBeenCalledTimes(1);
});
});
//# sourceMappingURL=index.spec.js.map