diff --git a/src/__tests__/events.js b/src/__tests__/events.js index 63eb3677..96c72cb5 100644 --- a/src/__tests__/events.js +++ b/src/__tests__/events.js @@ -223,6 +223,24 @@ test('fires shortcut events on Window', () => { window.removeEventListener('message', clickSpy) }) +test('throws a useful error message when firing events on non-existent nodes', () => { + expect(() => fireEvent(undefined, new MouseEvent('click'))).toThrow( + 'Unable to fire a "click" event - please provide a DOM element.', + ) +}) + +test('throws a useful error message when firing events on non-existent nodes (shortcut)', () => { + expect(() => fireEvent.click(undefined)).toThrow( + 'Unable to fire a "click" event - please provide a DOM element.', + ) +}) + +test('throws a useful error message when firing non-events', () => { + expect(() => fireEvent(document.createElement('div'), undefined)).toThrow( + 'Unable to fire an event - please provide an event object.', + ) +}) + test('fires events on Document', () => { const keyDownSpy = jest.fn() document.addEventListener('keydown', keyDownSpy) diff --git a/src/events.js b/src/events.js index 1ac93d19..0499a164 100644 --- a/src/events.js +++ b/src/events.js @@ -345,6 +345,14 @@ const eventAliasMap = { } function fireEvent(element, event) { + if (!event) { + throw new Error(`Unable to fire an event - please provide an event object.`) + } + if (!element) { + throw new Error( + `Unable to fire a "${event.type}" event - please provide a DOM element.`, + ) + } return element.dispatchEvent(event) } @@ -355,6 +363,11 @@ Object.keys(eventMap).forEach(key => { const eventName = key.toLowerCase() createEvent[key] = (node, init) => { + if (!node) { + throw new Error( + `Unable to fire a "${key}" event - please provide a DOM element.`, + ) + } const eventInit = {...defaultInit, ...init} const {target: {value, files, ...targetProperties} = {}} = eventInit if (value !== undefined) {