Skip to content

Commit 528a6cd

Browse files
authored
Migrate enzyme tests to testing-library (Merge PR #52)
Migrate enzyme tests to testing-library
2 parents 9bec1cc + 48fe4b1 commit 528a6cd

14 files changed

+649
-801
lines changed

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"src/index.d.ts"
2020
],
2121
"scripts": {
22-
"lint": "eslint ./src ./examples",
22+
"lint": "eslint ./src ./tests ./examples",
2323
"test": "yarn lint && yarn test:only",
2424
"test:only": "jest --no-cache --verbose --coverage",
2525
"test:dev": "jest --watchAll --no-cache --verbose --coverage",
@@ -61,19 +61,23 @@
6161
"@babel/preset-env": "^7.16.11",
6262
"@babel/preset-react": "^7.16.7",
6363
"@babel/preset-stage-2": "^7.8.3",
64-
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.7",
64+
"@testing-library/dom": "^8.13.0",
65+
"@testing-library/jest-dom": "^5.16.4",
66+
"@testing-library/react": "^13.0.0",
67+
"@testing-library/user-event": "^14.1.0",
6568
"babel-jest": "~27.5.1",
6669
"babel-loader": "~8.2.4",
6770
"coveralls": "~3.1.1",
6871
"cross-env": "~7.0.3",
6972
"css-loader": "~6.7.1",
70-
"enzyme": "~3.11.0",
71-
"enzyme-to-json": "~3.6.2",
7273
"eslint": "~8.11.0",
7374
"eslint-config-vkbansal": "~5.2.1",
7475
"eslint-import-resolver-webpack": "~0.13.2",
7576
"eslint-plugin-import": "~2.25.4",
77+
"eslint-plugin-jest": "^26.1.4",
78+
"eslint-plugin-jest-dom": "^4.0.1",
7679
"eslint-plugin-react": "~7.29.4",
80+
"eslint-plugin-testing-library": "^5.2.1",
7781
"history": "~5.3.0",
7882
"html-webpack-plugin": "~5.5.0",
7983
"http-server": "~14.1.0",
@@ -83,19 +87,15 @@
8387
"react": "~18.0.0",
8488
"react-dom": "~18.0.0",
8589
"react-router-dom": "~6.3.0",
86-
"react-test-renderer": "~18.0.0",
8790
"rimraf": "~3.0.0",
8891
"style-loader": "~3.3.1",
8992
"webpack": "5.72.0",
9093
"webpack-cli": "^4.9.2"
9194
},
9295
"jest": {
93-
"setupFiles": [
96+
"setupFilesAfterEnv": [
9497
"<rootDir>/tests/.setup.js"
9598
],
96-
"snapshotSerializers": [
97-
"enzyme-to-json/serializer"
98-
],
9999
"roots": [
100100
"<rootDir>/tests"
101101
],

src/AbstractMenu.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,29 @@ export default class AbstractMenu extends Component {
2525
return;
2626
}
2727

28-
switch (e.keyCode) {
29-
case 37: // left arrow
30-
case 27: // escape
28+
switch (e.key) {
29+
case 'ArrowLeft': // left arrow
30+
case 'Left': // IE specific value
31+
case 'Escape': // escape
32+
case 'Esc': // IE specific value
3133
e.preventDefault();
3234
this.hideMenu(e);
3335
break;
34-
case 38: // up arrow
36+
case 'ArrowUp': // up arrow
37+
case 'Up': // IE specific value
3538
e.preventDefault();
3639
this.selectChildren(true);
3740
break;
38-
case 40: // down arrow
41+
case 'ArrowDown': // down arrow
42+
case 'Down': // IE specific value
3943
e.preventDefault();
4044
this.selectChildren(false);
4145
break;
42-
case 39: // right arrow
46+
case 'ArrowRight': // right arrow
47+
case 'Right': // IE specific value
4348
this.tryToOpenSubMenu(e);
4449
break;
45-
case 13: // enter
50+
case 'Enter': // enter
4651
e.preventDefault();
4752
this.tryToOpenSubMenu(e);
4853
{

src/ContextMenu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ export default class ContextMenu extends AbstractMenu {
170170
// Disabling this rule for more consistency.
171171
/* eslint-disable-next-line class-methods-use-this */
172172
hideMenu = (e) => {
173-
if (e.keyCode === 27 || e.keyCode === 13) { // ECS or enter
173+
if (e.key === 'Escape' || e.key === 'Esc' || e.key === 'Enter') {
174174
hideMenu();
175175
}
176176
};

tests/.eslintrc.yml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
---
2-
env:
3-
jest: true
4-
rules:
5-
prefer-arrow-callback: 0
6-
no-mixed-requires: 0
2+
plugins:
3+
- jest
4+
- jest-dom
5+
- testing-library
6+
extends:
7+
- plugin:jest/recommended
8+
- plugin:jest-dom/recommended
9+
- plugin:testing-library/react
10+
env:
11+
jest: true
12+
rules:
13+
prefer-arrow-callback: 0
14+
no-mixed-requires: 0
15+
# This disallows using direct Node properties (eg: firstChild), but we have
16+
# legitimate uses:
17+
testing-library/no-node-access: 0

tests/.setup.js

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
1-
const jsdom = require('jsdom');
1+
// Importing this here makes it work everywhere.
2+
import '@testing-library/jest-dom';
23

3-
const documentHTML = '<!doctype html><html><body><div id="root"></div></body></html>';
4-
const dom = new jsdom.JSDOM(documentHTML);
5-
global.document = dom.window.document;
6-
global.window = dom.window;
7-
global.window.resizeTo = (width, height) => {
8-
global.window.innerWidth = width || global.window.innerWidth;
9-
global.window.innerHeight = width || global.window.innerHeight;
10-
global.window.dispatchEvent(new Event('resize'));
4+
window.resizeTo = (width, height) => {
5+
window.innerWidth = width || window.innerWidth;
6+
window.innerHeight = width || window.innerHeight;
7+
window.dispatchEvent(new Event('resize'));
118
};
12-
global.window.requestAnimationFrame = jest.fn();
13-
14-
const Enzyme = require('enzyme');
15-
const Adapter = require('@wojtekmaj/enzyme-adapter-react-17');
16-
17-
Enzyme.configure({ adapter: new Adapter() });

0 commit comments

Comments
 (0)