From 810400c765eaa2dec532493318f94b85df7940d3 Mon Sep 17 00:00:00 2001 From: Christian Vogt Date: Tue, 18 Jul 2023 14:07:38 -0400 Subject: [PATCH] improve run time of jest tests --- frontend/.babelrc.json | 16 ----------- frontend/babel.config.js | 36 ++++++++++++++++++++++++ frontend/jest.config.js | 16 +++++------ frontend/package-lock.json | 56 ++++++++++++++++++++++++++++++++++++++ frontend/package.json | 3 +- frontend/tsconfig.json | 2 +- 6 files changed, 103 insertions(+), 26 deletions(-) delete mode 100644 frontend/.babelrc.json create mode 100644 frontend/babel.config.js diff --git a/frontend/.babelrc.json b/frontend/.babelrc.json deleted file mode 100644 index b5cf683b7e..0000000000 --- a/frontend/.babelrc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "sourceType": "unambiguous", - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "chrome": 100 - } - } - ], - "@babel/preset-typescript", - "@babel/preset-react" - ], - "plugins": [] -} \ No newline at end of file diff --git a/frontend/babel.config.js b/frontend/babel.config.js new file mode 100644 index 0000000000..209f870a1f --- /dev/null +++ b/frontend/babel.config.js @@ -0,0 +1,36 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 100, + }, + }, + ], + '@babel/preset-react', + '@babel/preset-typescript', + ], + plugins: [ + // Devs tend to write `import { someIcon } from '@patternfly/react-icons';` + // This transforms the import to be specific which prevents having to parse 2k+ icons + // Also prevents potential bundle size blowups with CJS + [ + 'transform-imports', + { + '@patternfly/react-icons': { + transform: (importName) => + `@patternfly/react-icons/dist/js/icons/${ + importName === 'PathMissingIcon' + ? 'pathMissing-icon' + : importName + .split(/(?=[A-Z])/) + .join('-') + .toLowerCase() + }`, + preventFullImport: true, + }, + }, + ], + ], +}; diff --git a/frontend/jest.config.js b/frontend/jest.config.js index 74aabb8a60..db749dfa87 100644 --- a/frontend/jest.config.js +++ b/frontend/jest.config.js @@ -2,7 +2,8 @@ // https://jestjs.io/docs/en/configuration.html module.exports = { - testMatch: ['**/__tests__/unit/**/*.ts'], + roots: ['/src/__tests__/unit'], + testMatch: ['**/?(*.)+(spec|test).ts?(x)'], // Automatically clear mock calls and instances between every test clearMocks: true, @@ -18,16 +19,15 @@ module.exports = { '~/(.*)': '/src/$1', }, - // A preset that is used as a base for Jest's configuration - preset: 'ts-jest/presets/js-with-ts', - // The test environment that will be used for testing. - testEnvironment: 'jsdom', + testEnvironment: 'jest-environment-jsdom', - transform: { - 'node_modules/.+\\.(j|t)sx?$': 'ts-jest', - }, + // include projects from node_modules as required + transformIgnorePatterns: [ + 'node_modules/(?!yaml)', + ], // A list of paths to snapshot serializer modules Jest should use for snapshot testing snapshotSerializers: [], + }; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 582d19eda7..0549d5b7b2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -54,6 +54,7 @@ "@typescript-eslint/eslint-plugin": "^5.53.0", "@typescript-eslint/parser": "^5.53.0", "babel-loader": "^8.3.0", + "babel-plugin-transform-imports": "^2.0.0", "copy-webpack-plugin": "^6.2.1", "css-loader": "^5.2.7", "css-minimizer-webpack-plugin": "^4.2.2", @@ -11208,6 +11209,16 @@ "node": ">=4" } }, + "node_modules/babel-plugin-transform-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-imports/-/babel-plugin-transform-imports-2.0.0.tgz", + "integrity": "sha512-65ewumYJ85QiXdcB/jmiU0y0jg6eL6CdnDqQAqQ8JMOKh1E52VPG3NJzbVKWcgovUR5GBH8IWpCXQ7I8Q3wjgw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.4", + "is-valid-path": "^0.1.1" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -18007,6 +18018,39 @@ "node": ">=8" } }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -18234,6 +18278,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dev": true, + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 0a90c204db..ef89d161e0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -85,6 +85,7 @@ "@typescript-eslint/eslint-plugin": "^5.53.0", "@typescript-eslint/parser": "^5.53.0", "babel-loader": "^8.3.0", + "babel-plugin-transform-imports": "^2.0.0", "copy-webpack-plugin": "^6.2.1", "css-loader": "^5.2.7", "css-minimizer-webpack-plugin": "^4.2.2", @@ -181,4 +182,4 @@ "monaco-editor": "^0.31.1" } } -} \ No newline at end of file +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 235beaaab2..022925b117 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -23,5 +23,5 @@ "skipLibCheck": true }, "include": ["**/*.ts", "**/*.tsx", "**/*.jsx", "**/*.js"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "public"] }