Skip to content

Commit

Permalink
feat(config): add new eventWrapper config for wrapping fireEvent
Browse files Browse the repository at this point in the history
This is intended for supporting `act` in React, but should be useful for
other frameworks (I think it could help with triggering change detection
for angular for example).

Ref: testing-library/user-event#188,
testing-library/user-event#255,
https://github.com/testing-library/user-event/issues/277
  • Loading branch information
kentcdodds committed Jun 1, 2020
1 parent 9c0bff6 commit 1dac640
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 11 deletions.
1 change: 1 addition & 0 deletions src/config.js
Expand Up @@ -14,6 +14,7 @@ let config = {
// react-testing-library to use. For that reason, this feature will remain
// undocumented.
asyncWrapper: cb => cb(),
eventWrapper: cb => cb(),
// default value for the `hidden` option in `ByRole` queries
defaultHidden: false,
// showOriginalStackTrace flag to show the full error stack traces for async errors
Expand Down
27 changes: 16 additions & 11 deletions src/events.js
@@ -1,16 +1,21 @@
import {getConfig} from './config'
import {getWindowFromNode} from './helpers'
import {eventMap, eventAliasMap} from './event-map'

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)
return getConfig().eventWrapper(() => {
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)
})
}

const createEvent = {}
Expand Down Expand Up @@ -64,11 +69,11 @@ Object.keys(eventMap).forEach(key => {
/* istanbul ignore if */
if (typeof window.DataTransfer === 'function') {
Object.defineProperty(event, 'dataTransfer', {
value: Object.assign(new window.DataTransfer(), dataTransfer)
value: Object.assign(new window.DataTransfer(), dataTransfer),
})
} else {
Object.defineProperty(event, 'dataTransfer', {
value: dataTransfer
value: dataTransfer,
})
}
}
Expand Down

0 comments on commit 1dac640

Please sign in to comment.