UNPKG

test-event-listeners

Version:

Test-friendly object creator to simulate adding listeners for events.

56 lines (37 loc) 1.81 kB
# `test-event-listeners` [![Build Status](https://travis-ci.org/JoshuaKGoldberg/test-event-listeners.svg?branch=master)](https://travis-ci.org/JoshuaKGoldberg/test-event-listeners) [![npm version](https://badge.fury.io/js/test-event-listeners.svg)](https://www.npmjs.com/package/test-event-listeners) [![Downloads](https://img.shields.io/npm/dm/test-event-listeners.svg)](https://www.npmjs.com/package/test-event-listeners) Test-friendly object creator to simulate adding listeners for events. Allows you to add event listeners on an object and fire them at will. Great for simulating `window` or `document` events during tests! _No_ dependencies. _Tiny_ size. _Blazingly_ fast. _Easy_ breezy. ## Usage ```javascript import { createRegister } from "test-event-listeners"; const register = createRegister(); register.addEventListener("foo", (data) => console.log(`Got ${data}!`)); // Got bar! register.fireEvent("foo", "bar"); ``` This can be useful if, for example, you're manipulating a window's `"click"` and `"keydown"` events with Jest spies: ```typescript import { createRegister } from "test-event-listeners"; // Arrange const register = createRegister(); const keyDownSpy = jest.fn(); register.addEventListener("keydown", keyDownSpy) // Act register.fireEvent("keydown"); // Assert expect(keyDownSpy).toHaveBeenCalledTimes(1); ``` ### Usage with TypeScript Good news: test-event-listeners is written in TypeScript! You'll never have to worry about `@types` mismatches here! `createRegister` takes two templated types: 1. `TEventName extends string`: Event names that may be fired. 2. `TListener extends Function`: Type of functions stored as listeners. ```typescript const register = createRegister<"keydown", jasmine.Spy>(); ```