You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ms...@apache.org on 2025/06/06 13:21:47 UTC

(superset) 01/01: refactor(enzyme): remove enzyme

This is an automated email from the ASF dual-hosted git repository.

msyavuz pushed a commit to branch msyavuz/chore/react-18
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 4faf3d60837c0e3e773ea0a91476c86839d61ae8
Author: Mehmet Salih Yavuz <sa...@proton.me>
AuthorDate: Fri Jun 6 16:21:23 2025 +0300

    refactor(enzyme): remove enzyme
---
 superset-frontend/jest.config.js                        |  2 +-
 superset-frontend/package.json                          |  4 ----
 superset-frontend/spec/helpers/shim.tsx                 |  5 -----
 .../spec/helpers/{theming.ts => theming.tsx}            | 17 ++++++++++-------
 .../spec/helpers/waitForComponentToPaint.ts             | 17 +++--------------
 .../src/SqlLab/components/TabbedSqlEditors/index.tsx    |  2 +-
 6 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/superset-frontend/jest.config.js b/superset-frontend/jest.config.js
index 634221c242..f9aec71caf 100644
--- a/superset-frontend/jest.config.js
+++ b/superset-frontend/jest.config.js
@@ -55,7 +55,7 @@ module.exports = {
   ],
   coverageReporters: ['lcov', 'json-summary', 'html', 'text'],
   transformIgnorePatterns: [
-    'node_modules/(?!d3-(interpolate|color|time)|remark-gfm|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|@rjsf/*.|sinon|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.*|hast-.*|rehype-.*|remark-.*|mdast-.*|micromark-.*|parse-entities|property-information| [...]
+    'node_modules/(?!d3-(interpolate|color|time)|remark-gfm|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|@rjsf/*.|sinon|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.*|hast-.*|rehype-.*|remark-.*|mdast-.*|micromark-.*|parse-entities|property-information| [...]
   ],
   preset: 'ts-jest',
   transform: {
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 9c9422e794..ad8a68d444 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -261,7 +261,6 @@
     "@testing-library/user-event": "^12.8.3",
     "@types/classnames": "^2.2.10",
     "@types/dom-to-image": "^2.6.7",
-    "@types/enzyme": "^3.10.18",
     "@types/fetch-mock": "^7.3.2",
     "@types/jest": "^29.5.12",
     "@types/jquery": "^3.5.8",
@@ -291,7 +290,6 @@
     "@types/yargs": "12 - 18",
     "@typescript-eslint/eslint-plugin": "^5.62.0",
     "@typescript-eslint/parser": "^5.62.0",
-    "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0",
     "babel-jest": "^29.7.0",
     "babel-loader": "^10.0.0",
     "babel-plugin-dynamic-import-node": "^2.3.3",
@@ -303,8 +301,6 @@
     "cross-env": "^7.0.3",
     "css-loader": "^7.1.2",
     "css-minimizer-webpack-plugin": "^7.0.2",
-    "enzyme": "^3.11.0",
-    "enzyme-matchers": "^7.1.2",
     "eslint": "^8.56.0",
     "eslint-config-airbnb": "^19.0.4",
     "eslint-config-prettier": "^7.2.0",
diff --git a/superset-frontend/spec/helpers/shim.tsx b/superset-frontend/spec/helpers/shim.tsx
index af5ea84681..c8c19a5661 100644
--- a/superset-frontend/spec/helpers/shim.tsx
+++ b/superset-frontend/spec/helpers/shim.tsx
@@ -20,10 +20,7 @@ import { AriaAttributes } from 'react';
 import 'core-js/stable';
 import 'regenerator-runtime/runtime';
 import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';
-import 'enzyme-matchers';
 import jQuery from 'jquery';
-import Enzyme from 'enzyme';
-import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
 // https://jestjs.io/docs/jest-object#jestmockmodulename-factory-options
 // in order to mock modules in test case, so avoid absolute import module
 import { configure as configureTranslation } from '../../packages/superset-ui-core/src/translation';
@@ -33,8 +30,6 @@ import { ResizeObserver } from './ResizeObserver';
 import setupSupersetClient from './setupSupersetClient';
 import CacheStorage from './CacheStorage';
 
-Enzyme.configure({ adapter: new Adapter() });
-
 const exposedProperties = ['window', 'navigator', 'document'];
 
 const { defaultView } = document;
diff --git a/superset-frontend/spec/helpers/theming.ts b/superset-frontend/spec/helpers/theming.tsx
similarity index 82%
rename from superset-frontend/spec/helpers/theming.ts
rename to superset-frontend/spec/helpers/theming.tsx
index d24126b8d1..03a014ab4b 100644
--- a/superset-frontend/spec/helpers/theming.ts
+++ b/superset-frontend/spec/helpers/theming.tsx
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { mount as enzymeMount } from 'enzyme';
 // eslint-disable-next-line no-restricted-imports
 import { supersetTheme } from '@superset-ui/core';
+import { render } from 'spec/helpers/testing-library';
 import { ReactElement } from 'react';
 import { ProviderWrapper } from './ProviderWrapper';
 
@@ -33,12 +33,15 @@ export function styledMount(
   component: ReactElement,
   options: optionsType = {},
 ): any {
-  return enzymeMount(component, {
+  return render(component, {
+    wrapper: ({ children }) => (
+      <ProviderWrapper
+        theme={supersetTheme}
+        {...options?.wrappingComponentProps}
+      >
+        {children}
+      </ProviderWrapper>
+    ),
     ...options,
-    wrappingComponent: ProviderWrapper,
-    wrappingComponentProps: {
-      theme: supersetTheme,
-      ...options?.wrappingComponentProps,
-    },
   });
 }
diff --git a/superset-frontend/spec/helpers/waitForComponentToPaint.ts b/superset-frontend/spec/helpers/waitForComponentToPaint.ts
index 2e57a80b41..bc307d3ea3 100644
--- a/superset-frontend/spec/helpers/waitForComponentToPaint.ts
+++ b/superset-frontend/spec/helpers/waitForComponentToPaint.ts
@@ -16,19 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { ReactWrapper } from 'enzyme';
-import { act } from 'react-dom/test-utils';
+import { waitFor } from 'spec/helpers/testing-library';
 
-// taken from: https://github.com/enzymejs/enzyme/issues/2073
-// There is currently and issue with enzyme and react-16's hooks
-// that results in a race condition between tests and react hook updates.
-// This function ensures tests run after all react updates are done.
-export default async function waitForComponentToPaint<P = {}>(
-  wrapper: ReactWrapper<P>,
-  amount = 0,
-) {
-  await act(async () => {
-    await new Promise(resolve => setTimeout(resolve, amount));
-    wrapper.update();
-  });
+export default async function waitForComponentToPaint(amount = 0) {
+  await waitFor(() => new Promise(resolve => setTimeout(resolve, amount)));
 }
diff --git a/superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.tsx b/superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.tsx
index ef931af873..be39b8beac 100644
--- a/superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.tsx
+++ b/superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.tsx
@@ -230,7 +230,7 @@ class TabbedSqlEditors extends PureComponent<TabbedSqlEditorsProps> {
       <EditableTabs.TabPane
         key={qe.id}
         tab={<SqlEditorTabHeader queryEditor={qe} />}
-        // for tests - key prop isn't handled by enzyme well bcs it's a react keyword
+        // for tests - key prop isn't handled by testing-library well bcs it's a react keyword
         data-key={qe.id}
       >
         <SqlEditor