Skip to content

Commit 4541f34

Browse files
vbabelVictor Babel
and
Victor Babel
authored
fix: fire event init (#63)
* test: assert event init is passed on to dom fireEvent * fix: pass event init on to dom fireEvent Co-authored-by: Victor Babel <[email protected]>
1 parent 5f35090 commit 4541f34

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

src/__tests__/events.js

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ eventTypes.forEach(({ type, events, elementType, init }) => {
152152
expect(fireEvent[eventName](ref.current, init)).toBe(true)
153153

154154
expect(spy).toHaveBeenCalledTimes(1)
155+
if (init) {
156+
expect(spy).toHaveBeenCalledWith(expect.objectContaining(init))
157+
}
155158
})
156159
})
157160
})
@@ -164,9 +167,17 @@ test('onInput works', () => {
164167
container: { firstChild: input }
165168
} = render(<input type="text" onInput={handler} />)
166169

167-
expect(fireEvent.input(input, { target: { value: 'a' } })).toBe(true)
170+
const targetProperties = { value: 'a' }
171+
const otherProperties = { isComposing: true }
172+
const init = {
173+
target: targetProperties,
174+
...otherProperties
175+
}
176+
177+
expect(fireEvent.input(input, init)).toBe(true)
168178

169179
expect(handler).toHaveBeenCalledTimes(1)
180+
expect(handler).toHaveBeenCalledWith(expect.objectContaining(otherProperties))
170181
})
171182

172183
test('calling `fireEvent` directly works too', () => {
@@ -176,14 +187,16 @@ test('calling `fireEvent` directly works too', () => {
176187
container: { firstChild: button }
177188
} = render(<button onClick={handler} />)
178189

179-
expect(fireEvent(
180-
button,
181-
new Event('MouseEvent', {
182-
bubbles: true,
183-
cancelable: true,
184-
button: 0
185-
})
186-
)).toBe(true)
190+
const event = new MouseEvent('click', {
191+
bubbles: true,
192+
cancelable: true,
193+
button: 0
194+
})
195+
196+
expect(fireEvent(button, event)).toBe(true)
197+
198+
expect(handler).toHaveBeenCalledTimes(1)
199+
expect(handler).toHaveBeenCalledWith(event)
187200
})
188201

189202
test('`fireEvent` returns false when prevented', () => {

src/fire-event.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import { fireEvent as domFireEvent, createEvent } from '@testing-library/dom'
55
export const fireEvent = (...args) => domFireEvent(...args)
66

77
Object.keys(domFireEvent).forEach((key) => {
8-
fireEvent[key] = (elem) => {
8+
fireEvent[key] = (elem, init) => {
99
// Preact registers event-listeners in lower-case, so onPointerStart becomes pointerStart
1010
// here we will copy this behavior, when we fire an element we will fire it in lowercase so
1111
// we hit the Preact listeners.
1212
const eventName = `on${key.toLowerCase()}`
1313
const isInElem = eventName in elem
1414
return isInElem
15-
? domFireEvent[key](elem)
16-
: domFireEvent(elem, createEvent(key[0].toUpperCase() + key.slice(1), elem))
15+
? domFireEvent[key](elem, init)
16+
: domFireEvent(elem, createEvent(key[0].toUpperCase() + key.slice(1), elem, init))
1717
}
1818
})

0 commit comments

Comments
 (0)