Skip to content

Commit d58cf8d

Browse files
dominykasKent C. Dodds
authored and
Kent C. Dodds
committed
feat: provide human error messages for missing fireEvent() params (#355)
1 parent e7e5956 commit d58cf8d

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/__tests__/events.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,24 @@ test('fires shortcut events on Window', () => {
223223
window.removeEventListener('message', clickSpy)
224224
})
225225

226+
test('throws a useful error message when firing events on non-existent nodes', () => {
227+
expect(() => fireEvent(undefined, new MouseEvent('click'))).toThrow(
228+
'Unable to fire a "click" event - please provide a DOM element.',
229+
)
230+
})
231+
232+
test('throws a useful error message when firing events on non-existent nodes (shortcut)', () => {
233+
expect(() => fireEvent.click(undefined)).toThrow(
234+
'Unable to fire a "click" event - please provide a DOM element.',
235+
)
236+
})
237+
238+
test('throws a useful error message when firing non-events', () => {
239+
expect(() => fireEvent(document.createElement('div'), undefined)).toThrow(
240+
'Unable to fire an event - please provide an event object.',
241+
)
242+
})
243+
226244
test('fires events on Document', () => {
227245
const keyDownSpy = jest.fn()
228246
document.addEventListener('keydown', keyDownSpy)

src/events.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,14 @@ const eventAliasMap = {
345345
}
346346

347347
function fireEvent(element, event) {
348+
if (!event) {
349+
throw new Error(`Unable to fire an event - please provide an event object.`)
350+
}
351+
if (!element) {
352+
throw new Error(
353+
`Unable to fire a "${event.type}" event - please provide a DOM element.`,
354+
)
355+
}
348356
return element.dispatchEvent(event)
349357
}
350358

@@ -355,6 +363,11 @@ Object.keys(eventMap).forEach(key => {
355363
const eventName = key.toLowerCase()
356364

357365
createEvent[key] = (node, init) => {
366+
if (!node) {
367+
throw new Error(
368+
`Unable to fire a "${key}" event - please provide a DOM element.`,
369+
)
370+
}
358371
const eventInit = {...defaultInit, ...init}
359372
const {target: {value, files, ...targetProperties} = {}} = eventInit
360373
if (value !== undefined) {

0 commit comments

Comments
 (0)