Skip to content

Commit bba0a39

Browse files
Updating Jest to v27 (#2671)
* Updating Jest to v27 * fix lint * fix TS * update yarn.lock * solved listbox difference * solved dnd issue and addressed jsdom upgrade * fix lint Co-authored-by: Danni <[email protected]>
1 parent d764bb0 commit bba0a39

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+927
-840
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,11 @@
125125
"full-icu": "^1.3.0",
126126
"identity-obj-proxy": "^3.0.0",
127127
"ignore-styles": "^5.0.1",
128-
"jest": "^26.4.2",
128+
"jest": "^27.4.3",
129+
"jest-environment-jsdom": "^27.4.3",
129130
"jest-junit": "^12.0.0",
130131
"jest-matchmedia-mock": "^1.0.0",
131-
"jsdom": "^16.3.0",
132+
"jsdom": "^16.7.0",
132133
"json-diff-ts": "^1.1.0",
133134
"lerna": "^3.13.2",
134135
"lfcdn": "^0.4.2",
@@ -178,7 +179,6 @@
178179
"@babel/core": "7.12.10",
179180
"@babel/runtime": "7.12.5",
180181
"postcss-calc": "6.0.2",
181-
"jest-environment-jsdom": "26.3.0",
182-
"jsdom": "16.3.0"
182+
"jsdom": "16.7.0"
183183
}
184184
}

packages/@react-aria/aria-modal-polyfill/test/index.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {watchModals} from '../';
2525
describe('watchModals', () => {
2626
let matchMedia;
2727
beforeAll(() => {
28-
jest.useFakeTimers();
28+
jest.useFakeTimers('legacy');
2929
});
3030
afterAll(() => {
3131
jest.useRealTimers();

packages/@react-aria/calendar/test/useCalendar.test.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,10 @@ import React from 'react';
1717

1818
describe('useCalendar', () => {
1919
beforeAll(() => {
20-
jest.useFakeTimers();
20+
jest.useFakeTimers('legacy');
2121
jest.spyOn(window, 'requestAnimationFrame').mockImplementation(cb => cb());
2222
});
2323

24-
afterAll(() => {
25-
jest.useRealTimers();
26-
window.requestAnimationFrame.mockRestore();
27-
});
28-
2924
afterEach(() => {
3025
// clear any live announcers
3126
act(() => {

packages/@react-aria/color/test/useColorWheel.test.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,15 @@ function ColorWheel(props: ColorWheelProps) {
5252
describe('useColorWheel', () => {
5353
let onChangeSpy = jest.fn();
5454

55-
afterEach(() => {
56-
onChangeSpy.mockClear();
57-
});
58-
5955
beforeAll(() => {
6056
// @ts-ignore
6157
jest.spyOn(window, 'requestAnimationFrame').mockImplementation((cb) => cb());
62-
jest.useFakeTimers();
63-
});
64-
afterAll(() => {
65-
jest.useRealTimers();
6658
// @ts-ignore
67-
window.requestAnimationFrame.mockRestore();
59+
jest.useFakeTimers('legacy');
6860
});
6961

7062
afterEach(() => {
63+
onChangeSpy.mockClear();
7164
// for restoreTextSelection
7265
jest.runAllTimers();
7366
});

packages/@react-aria/dnd/src/DragManager.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -168,17 +168,9 @@ class DragSession {
168168
document.addEventListener(event, this.cancelEvent, true);
169169
}
170170

171-
this.mutationObserver = new MutationObserver(() => {
172-
// JSDOM has a bug where MutationObserver enters an infinite loop if mutations
173-
// occur inside a MutationObserver callback. If running in Node, wait until
174-
// the next tick to update valid drop targets.
175-
// See https://github.com/jsdom/jsdom/issues/3096
176-
if (typeof setImmediate === 'function') {
177-
this.mutationImmediate = setImmediate(() => this.updateValidDropTargets());
178-
} else {
179-
this.updateValidDropTargets();
180-
}
181-
});
171+
this.mutationObserver = new MutationObserver(() =>
172+
this.updateValidDropTargets()
173+
);
182174
this.updateValidDropTargets();
183175

184176
announce(this.formatMessage(MESSAGES[getDragModality()]));

packages/@react-aria/dnd/test/dnd.test.js

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
jest.mock('@react-aria/live-announcer');
14-
import {act, fireEvent, render, waitFor} from '@testing-library/react';
14+
import {act, fireEvent, render} from '@testing-library/react';
1515
import {announce} from '@react-aria/live-announcer';
1616
import {CUSTOM_DRAG_TYPE} from '../src/constants';
1717
import {DataTransfer, DataTransferItem, DragEvent, FileSystemDirectoryEntry, FileSystemFileEntry} from './mocks';
@@ -31,7 +31,7 @@ describe('useDrag and useDrop', function () {
3131
height: 50
3232
}));
3333

34-
jest.useFakeTimers('modern');
34+
jest.useFakeTimers();
3535
});
3636

3737
afterEach(() => {
@@ -1121,6 +1121,7 @@ describe('useDrag and useDrop', function () {
11211121
afterEach(() => {
11221122
fireEvent.keyDown(document.body, {key: 'Escape'});
11231123
fireEvent.keyUp(document.body, {key: 'Escape'});
1124+
act(() => jest.runAllTimers());
11241125
});
11251126

11261127
it('should perform basic drag and drop', async () => {
@@ -1414,25 +1415,22 @@ describe('useDrag and useDrop', function () {
14141415

14151416
fireEvent.keyDown(draggable, {key: 'Enter'});
14161417
fireEvent.keyUp(draggable, {key: 'Enter'});
1417-
act(() => jest.runAllTimers());
1418+
act(() => {jest.runAllTimers();});
14181419
expect(document.activeElement).toBe(droppable2);
14191420
});
14201421

14211422
it('should handle when a drop target is hidden with aria-hidden', async () => {
1422-
let setShowTarget2;
1423-
let Test = () => {
1424-
let [showTarget2, _setShowTarget2] = React.useState(true);
1425-
setShowTarget2 = _setShowTarget2;
1426-
return (<>
1423+
let Test = (props) => (
1424+
<>
14271425
<Draggable />
14281426
<Droppable />
1429-
<div aria-hidden={!showTarget2 || undefined}>
1427+
<div aria-hidden={!props.showTarget || undefined}>
14301428
<Droppable>Drop here 2</Droppable>
14311429
</div>
1432-
</>);
1433-
};
1430+
</>
1431+
);
14341432

1435-
let tree = render(<Test />);
1433+
let tree = render(<Test showTarget />);
14361434

14371435
let draggable = tree.getByText('Drag me');
14381436
let droppable = tree.getByText('Drop here');
@@ -1448,10 +1446,12 @@ describe('useDrag and useDrop', function () {
14481446

14491447
userEvent.tab();
14501448
expect(document.activeElement).toBe(droppable2);
1451-
1452-
act(() => setShowTarget2(false));
1449+
// wait for the mutation observer I believe
1450+
await act(async () =>
1451+
tree.rerender(<Test />)
1452+
);
14531453
expect(tree.getAllByRole('button')).toHaveLength(2);
1454-
await waitFor(() => expect(document.activeElement).toBe(droppable));
1454+
expect(document.activeElement).toBe(droppable);
14551455

14561456
userEvent.tab();
14571457
expect(document.activeElement).toBe(draggable);
@@ -2070,19 +2070,16 @@ describe('useDrag and useDrop', function () {
20702070
});
20712071

20722072
it('should handle when a non drop target element is added', async () => {
2073-
let setShowInput2;
2074-
let Test = () => {
2075-
let [showInput2, _setShowInput2] = React.useState(false);
2076-
setShowInput2 = _setShowInput2;
2077-
return (<>
2073+
let Test = (props) => (
2074+
<>
20782075
<Draggable />
20792076
<input />
20802077
<Droppable />
2081-
{showInput2 &&
2078+
{props.showInput2 &&
20822079
<input />
20832080
}
2084-
</>);
2085-
};
2081+
</>
2082+
);
20862083

20872084
let tree = render(<Test />);
20882085

@@ -2096,9 +2093,10 @@ describe('useDrag and useDrop', function () {
20962093

20972094
expect(() => tree.getAllByRole('textbox')).toThrow();
20982095

2099-
act(() => setShowInput2(true));
2100-
// MutationObserver is async
2101-
await waitFor(() => expect(() => tree.getAllByRole('textbox')).toThrow());
2096+
await act(async () => {
2097+
await tree.rerender(<Test showInput2 />);
2098+
});
2099+
expect(() => tree.getAllByRole('textbox')).toThrow();
21022100

21032101
fireEvent.click(draggable);
21042102
expect(tree.getAllByRole('textbox')).toHaveLength(2);
@@ -2132,21 +2130,18 @@ describe('useDrag and useDrop', function () {
21322130
expect(tree.getAllByRole('button')).toHaveLength(2);
21332131
});
21342132

2135-
it('should handle when a drop target is hidden with aria-hidden', () => {
2136-
let setShowTarget2;
2137-
let Test = () => {
2138-
let [showTarget2, _setShowTarget2] = React.useState(true);
2139-
setShowTarget2 = _setShowTarget2;
2140-
return (<>
2133+
it('should handle when a drop target is hidden with aria-hidden', async () => {
2134+
let Test = (props) => (
2135+
<>
21412136
<Draggable />
21422137
<Droppable />
2143-
<div aria-hidden={!showTarget2 || undefined}>
2138+
<div aria-hidden={!props.showTarget2 || undefined}>
21442139
<Droppable>Drop here 2</Droppable>
21452140
</div>
2146-
</>);
2147-
};
2141+
</>
2142+
);
21482143

2149-
let tree = render(<Test />);
2144+
let tree = render(<Test showTarget2 />);
21502145

21512146
let draggable = tree.getByText('Drag me');
21522147

@@ -2156,7 +2151,9 @@ describe('useDrag and useDrop', function () {
21562151

21572152
expect(tree.getAllByRole('button')).toHaveLength(3);
21582153

2159-
act(() => setShowTarget2(false));
2154+
await act(async () => {
2155+
await tree.rerender(<Test />);
2156+
});
21602157
expect(tree.getAllByRole('button')).toHaveLength(2);
21612158
});
21622159

packages/@react-aria/dnd/test/useDraggableCollection.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ describe('useDraggableCollection', () => {
3131
height: 50
3232
}));
3333

34-
jest.useFakeTimers();
34+
jest.useFakeTimers('legacy');
3535
});
3636

3737
afterEach(() => {

packages/@react-aria/dnd/test/useDroppableCollection.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('useDroppableCollection', () => {
6363
return this.getBoundingClientRect().height;
6464
});
6565

66-
jest.useFakeTimers();
66+
jest.useFakeTimers('legacy');
6767
});
6868

6969
afterEach(() => {

packages/@react-aria/interactions/test/useHover.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function pointerEvent(type, opts) {
3838

3939
describe('useHover', function () {
4040
beforeAll(() => {
41-
jest.useFakeTimers();
41+
jest.useFakeTimers('legacy');
4242
});
4343

4444
it('does not handle hover events if disabled', function () {
@@ -531,7 +531,7 @@ describe('useHover', function () {
531531
}
532532

533533
beforeAll(() => {
534-
jest.useFakeTimers();
534+
jest.useFakeTimers('legacy');
535535
});
536536
afterAll(() => {
537537
jest.useRealTimers();

packages/@react-aria/interactions/test/useLongPress.test.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,10 @@ function ExampleWithPress(props) {
3131

3232
describe('useLongPress', function () {
3333
beforeAll(() => {
34-
jest.useFakeTimers();
34+
jest.useFakeTimers('legacy');
3535
jest.spyOn(window, 'requestAnimationFrame').mockImplementation(cb => cb());
3636
});
3737

38-
afterAll(() => {
39-
jest.useRealTimers();
40-
window.requestAnimationFrame.mockRestore();
41-
});
42-
4338
afterEach(() => {
4439
act(() => jest.runAllTimers());
4540
});

0 commit comments

Comments
 (0)