Skip to content

Commit a50c9e1

Browse files
committed
chore(refactor): Add infra for notion of "discrete events"
1 parent 7ecf525 commit a50c9e1

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

src/fire-event.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,39 @@
11
import {fireEvent as dtlFireEvent} from '@testing-library/dom'
2+
import act from './act-compat'
3+
4+
const discreteEvents = new Set()
5+
function isDiscreteEvent(type) {
6+
return discreteEvents.has(type)
7+
}
8+
9+
function noAct(cb) {
10+
cb()
11+
}
212

313
// react-testing-library's version of fireEvent will call
414
// dom-testing-library's version of fireEvent. The reason
515
// we make this distinction however is because we have
616
// a few extra events that work a bit differently
7-
const fireEvent = (...args) => dtlFireEvent(...args)
17+
function fireEvent(element, event, ...args) {
18+
const eventWrapper = isDiscreteEvent(event.type) ? noAct : act
19+
20+
let fireEventReturnValue
21+
eventWrapper(() => {
22+
fireEventReturnValue = dtlFireEvent(element, event, ...args)
23+
})
24+
return fireEventReturnValue
25+
}
826

927
Object.keys(dtlFireEvent).forEach(key => {
10-
fireEvent[key] = (...args) => dtlFireEvent[key](...args)
28+
fireEvent[key] = (element, ...args) => {
29+
const eventWrapper = isDiscreteEvent(key.toLowerCase()) ? noAct : act
30+
31+
let fireEventReturnValue
32+
eventWrapper(() => {
33+
fireEventReturnValue = dtlFireEvent[key](element, ...args)
34+
})
35+
return fireEventReturnValue
36+
}
1137
})
1238

1339
// React event system tracks native mouseOver/mouseOut events for

src/pure.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,6 @@ configureDTL({
1616
})
1717
return result
1818
},
19-
eventWrapper: cb => {
20-
let result
21-
act(() => {
22-
result = cb()
23-
})
24-
return result
25-
},
2619
})
2720

2821
const mountedContainers = new Set()

0 commit comments

Comments
 (0)