text: import Emitter from "./emitter";
  
  describe("Emitter", () => {
    it("calls a callback", () => {
      const mock = jest.fn();
      const emitter = new Emitter();
      emitter.on("some-event", mock);
      emitter.trigger("some-event");
      expect(mock).toHaveBeenCalled();
    });
    it("calls multiple callbacks", () => {
      const mock1 = jest.fn();
      const mock2 = jest.fn();
      const emitter = new Emitter();
      emitter.on("some-event", mock1);
      emitter.on("some-event", mock2);
      emitter.trigger("some-event");
      expect(mock1).toHaveBeenCalled();
      expect(mock2).toHaveBeenCalled();
    });
    it("returns an unsubscribe function", () => {
      const mock = jest.fn();
      const emitter = new Emitter();
      const unsubscribe = emitter.on("some-event", mock);
      emitter.trigger("some-event");
      unsubscribe();
      emitter.trigger("some-event");
      emitter.trigger("some-event");
      emitter.trigger("some-event");
      emitter.trigger("some-event");
      emitter.trigger("some-event");
      expect(mock).toHaveBeenCalledTimes(1);
    });
    it("subscriptions do not take effent until the next event", () => {
      const mock = jest.fn();
      const emitter = new Emitter();
      emitter.on("some-event", () => {
        emitter.on("some-event", mock);
      });
      emitter.trigger("some-event");
      expect(mock).not.toHaveBeenCalled();
    });
    it("unsubscribe does not take effect until the next event", () => {
      const mock = jest.fn();
      const emitter = new Emitter();
      emitter.on("some-event", () => {
        unsubscribe(); // eslint-disable-line no-use-before-define
      });
      const unsubscribe = emitter.on("some-event", mock);
      emitter.trigger("some-event");
      expect(mock).toHaveBeenCalled();
    });
  });
  