UNPKG

vanillajs-browser-helpers

Version:

Collection of convenience code snippets (helpers) that aims to make it a little easier to work with vanilla JS in the browser

89 lines (61 loc) 1.82 kB
import { bind, unbind } from './assets/helpers'; import trigger from '../trigger'; describe('"Trigger"', () => { function suite(elm?: Element | Window) { const cb = jest.fn(); const evt = 'test'; const evts = [1, 2, 3].map((n) => evt + n); const _trigger = (...args: [ eventNames: string | string[], data?: unknown ]) => elm ? trigger(elm, ...args) : trigger(...args); const target = elm || document; beforeEach(() => { cb.mockClear(); }); it('Returns the given element', () => { expect(_trigger(evt)).toBe(target); }); it.each( ['', '_', '-', '.', ':'] )('Triggers event with separator: "%s"', (separator) => { const cb = jest.fn(); let e = 'test'; if (separator) { e += separator + 'part'; } bind(target, e, cb); _trigger(e); expect(cb).toHaveBeenCalledTimes(1); unbind(target, e, cb); }); it('Triggers multiple events', () => { const cb = jest.fn(); evts.forEach((e) => bind(target, e, cb)); _trigger(evts); expect(cb).toHaveBeenCalledTimes(3); evts.forEach((e) => unbind(target, e, cb)); }); it.each([ ['Object', { extra: 'test' }], ['Function', () => undefined], ['String', 'test'] ])('Triggers given event with extra data: %s', (_, val) => { bind(target, evt, cb); _trigger(evt, val); expect(cb).toHaveBeenLastCalledWith( expect.objectContaining({ detail: val }) ); unbind(target, 'test', cb); }); } describe('With no Element given (falls back to Document)', () => { suite(); }); describe('With a given HTML element', () => { suite(document.body); }); describe('With Window', () => { suite(window); }); });