Skip to content

Commit f55f74d

Browse files
committed
Always set window.event in test environment
1 parent ad8211d commit f55f74d

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

packages/react-dom/src/__tests__/ReactDOMNativeEventHeuristic-test.js

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,6 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
3333
document.body.removeChild(container);
3434
});
3535

36-
function dispatchAndSetCurrentEvent(el, event) {
37-
try {
38-
window.event = event;
39-
el.dispatchEvent(event);
40-
} finally {
41-
window.event = undefined;
42-
}
43-
}
44-
4536
// @gate experimental
4637
// @gate enableDiscreteEventMicroTasks && enableNativeEventPriorityInference
4738
it('ignores discrete events on a pending removed element', async () => {
@@ -78,9 +69,9 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
7869
// Dispatch a click event on the Disable-button.
7970
const firstEvent = document.createEvent('Event');
8071
firstEvent.initEvent('click', true, true);
81-
expect(() =>
82-
dispatchAndSetCurrentEvent(disableButton, firstEvent),
83-
).toErrorDev(['An update to Form inside a test was not wrapped in act']);
72+
expect(() => disableButton.dispatchEvent(firstEvent)).toErrorDev([
73+
'An update to Form inside a test was not wrapped in act',
74+
]);
8475

8576
// There should now be a pending update to disable the form.
8677
// This should not have flushed yet since it's in concurrent mode.
@@ -144,7 +135,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
144135
const firstEvent = document.createEvent('Event');
145136
firstEvent.initEvent('click', true, true);
146137
expect(() => {
147-
dispatchAndSetCurrentEvent(disableButton, firstEvent);
138+
disableButton.dispatchEvent(firstEvent);
148139
}).toErrorDev(['An update to Form inside a test was not wrapped in act']);
149140

150141
// There should now be a pending update to disable the form.
@@ -158,7 +149,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
158149
// Now let's dispatch an event on the submit button.
159150
const secondEvent = document.createEvent('Event');
160151
secondEvent.initEvent('click', true, true);
161-
dispatchAndSetCurrentEvent(submitButton, secondEvent);
152+
submitButton.dispatchEvent(secondEvent);
162153

163154
// Therefore the form should never have been submitted.
164155
expect(formSubmitted).toBe(false);
@@ -208,7 +199,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
208199
const firstEvent = document.createEvent('Event');
209200
firstEvent.initEvent('click', true, true);
210201
expect(() => {
211-
dispatchAndSetCurrentEvent(enableButton, firstEvent);
202+
enableButton.dispatchEvent(firstEvent);
212203
}).toErrorDev(['An update to Form inside a test was not wrapped in act']);
213204

214205
// There should now be a pending update to enable the form.
@@ -222,7 +213,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
222213
// Now let's dispatch an event on the submit button.
223214
const secondEvent = document.createEvent('Event');
224215
secondEvent.initEvent('click', true, true);
225-
dispatchAndSetCurrentEvent(submitButton, secondEvent);
216+
submitButton.dispatchEvent(secondEvent);
226217

227218
// Therefore the form should have been submitted.
228219
expect(formSubmitted).toBe(true);
@@ -250,7 +241,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
250241
await act(async () => {
251242
const mouseOverEvent = document.createEvent('MouseEvents');
252243
mouseOverEvent.initEvent('mouseover', true, true);
253-
dispatchAndSetCurrentEvent(target.current, mouseOverEvent);
244+
target.current.dispatchEvent(mouseOverEvent);
254245

255246
// 3s should be enough to expire the updates
256247
Scheduler.unstable_advanceTime(3000);
@@ -283,7 +274,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
283274
// but we should still correctly determine their priority.
284275
const mouseEnterEvent = document.createEvent('MouseEvents');
285276
mouseEnterEvent.initEvent('mouseenter', true, true);
286-
dispatchAndSetCurrentEvent(target.current, mouseEnterEvent);
277+
target.current.dispatchEvent(mouseEnterEvent);
287278

288279
// 3s should be enough to expire the updates
289280
Scheduler.unstable_advanceTime(3000);

scripts/jest/setupEnvironment.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ global.__EXPERIMENTAL__ =
2222
global.__VARIANT__ = !!process.env.VARIANT;
2323

2424
if (typeof window !== 'undefined') {
25+
// We rely on window.event for heuristics so let's set it in tests.
26+
window.event = undefined;
27+
const oldDispatchEvent = EventTarget.prototype.dispatchEvent;
28+
EventTarget.prototype.dispatchEvent = function(e) {
29+
try {
30+
window.event = e;
31+
return oldDispatchEvent.apply(this, arguments);
32+
} finally {
33+
window.event = undefined;
34+
}
35+
};
36+
2537
global.requestIdleCallback = function(callback) {
2638
return setTimeout(() => {
2739
callback({

0 commit comments

Comments
 (0)