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

hainenber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 4a79896bb24 chore(build): replace replaceable `jest-mock-console` with 
native Jest spies (#38643)
4a79896bb24 is described below

commit 4a79896bb24522df6e349062bf1bbb98e0ec4d9c
Author: Đỗ Trọng Hải <[email protected]>
AuthorDate: Tue May 12 21:32:08 2026 +0700

    chore(build): replace replaceable `jest-mock-console` with native Jest 
spies (#38643)
    
    Signed-off-by: hainenber <[email protected]>
---
 superset-frontend/.eslintrc.js                     |  4 ++++
 superset-frontend/package-lock.json                | 11 ----------
 .../packages/superset-ui-core/package.json         |  1 -
 .../test/chart/components/SuperChart.test.tsx      |  8 -------
 .../test/chart/components/SuperChartCore.test.tsx  | 11 ----------
 .../components/createLoadableRenderer.test.tsx     |  7 ------
 .../superset-ui-core/test/models/Registry.test.ts  | 25 +++++++---------------
 7 files changed, 12 insertions(+), 55 deletions(-)

diff --git a/superset-frontend/.eslintrc.js b/superset-frontend/.eslintrc.js
index fcca8cbf5ae..002d3f39252 100644
--- a/superset-frontend/.eslintrc.js
+++ b/superset-frontend/.eslintrc.js
@@ -77,6 +77,10 @@ const restrictedImportsRules = {
     name: 'query-string',
     message: 'Please use the URLSearchParams API instead of query-string.',
   },
+  'no-jest-mock-console': {
+    name: 'jest-mock-console',
+    message: 'Please use native Jest spies, i.e. jest.spyOn(console, "warn")',
+  }
 };
 
 module.exports = {
diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index 2be3f5cded7..02b39b9942c 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -30223,16 +30223,6 @@
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/jest-mock-console": {
-      "version": "2.0.0",
-      "resolved": 
"https://registry.npmjs.org/jest-mock-console/-/jest-mock-console-2.0.0.tgz";,
-      "integrity": 
"sha512-7zrKtXVut+6doalosFxw/2O9spLepQJ9VukODtyLIub2fFkWKe1TyQrxr/GyQogTQcdkHfhvFJdx1OEzLqf/mw==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "jest": ">= 22.4.2"
-      }
-    },
     "node_modules/jest-pnp-resolver": {
       "version": "1.2.3",
       "resolved": 
"https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz";,
@@ -50216,7 +50206,6 @@
         "@types/rison": "0.1.0",
         "@types/seedrandom": "^3.0.8",
         "fetch-mock": "^12.6.0",
-        "jest-mock-console": "^2.0.0",
         "resize-observer-polyfill": "1.5.1",
         "timezone-mock": "^1.4.2"
       },
diff --git a/superset-frontend/packages/superset-ui-core/package.json 
b/superset-frontend/packages/superset-ui-core/package.json
index 06a43ccae5b..5544dc6adf7 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -83,7 +83,6 @@
     "@types/rison": "0.1.0",
     "@types/seedrandom": "^3.0.8",
     "fetch-mock": "^12.6.0",
-    "jest-mock-console": "^2.0.0",
     "resize-observer-polyfill": "1.5.1",
     "timezone-mock": "^1.4.2"
   },
diff --git 
a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChart.test.tsx
 
b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChart.test.tsx
index 2e3d87aafa8..3c0d8bab700 100644
--- 
a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChart.test.tsx
+++ 
b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChart.test.tsx
@@ -19,7 +19,6 @@
 
 import '@testing-library/jest-dom';
 import { render, screen } from '@superset-ui/core/spec';
-import mockConsole, { RestoreConsole } from 'jest-mock-console';
 import { triggerResizeObserver } from 'resize-observer-polyfill';
 import { ErrorBoundary } from 'react-error-boundary';
 
@@ -66,8 +65,6 @@ function getDimensionText(container: HTMLElement) {
 describe('SuperChart', () => {
   jest.setTimeout(5000);
 
-  let restoreConsole: RestoreConsole;
-
   const plugins = [
     new DiligentChartPlugin().configure({ key: ChartKeys.DILIGENT }),
     new BuggyChartPlugin().configure({ key: ChartKeys.BUGGY }),
@@ -80,14 +77,9 @@ describe('SuperChart', () => {
   });
 
   beforeEach(() => {
-    restoreConsole = mockConsole();
     triggerResizeObserver([]); // Reset any pending resize observers
   });
 
-  afterEach(() => {
-    restoreConsole();
-  });
-
   describe('includes ErrorBoundary', () => {
     let expectedErrors = 0;
     let actualErrors = 0;
diff --git 
a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
 
b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
index 82b1e866dc8..62b99bf04e0 100644
--- 
a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
+++ 
b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
@@ -18,7 +18,6 @@
  */
 
 import '@testing-library/jest-dom';
-import mockConsole, { RestoreConsole } from 'jest-mock-console';
 import { ChartProps } from '@superset-ui/core';
 import { supersetTheme } from '@apache-superset/core/theme';
 import { render, screen, waitFor } from '@superset-ui/core/spec';
@@ -38,8 +37,6 @@ describe('SuperChartCore', () => {
     new SlowChartPlugin().configure({ key: ChartKeys.SLOW }),
   ];
 
-  let restoreConsole: RestoreConsole;
-
   beforeAll(() => {
     jest.setTimeout(30000);
     plugins.forEach(p => {
@@ -53,14 +50,6 @@ describe('SuperChartCore', () => {
     });
   });
 
-  beforeEach(() => {
-    restoreConsole = mockConsole();
-  });
-
-  afterEach(() => {
-    restoreConsole();
-  });
-
   describe('registered charts', () => {
     test('renders registered chart', async () => {
       const { container } = render(
diff --git 
a/superset-frontend/packages/superset-ui-core/test/chart/components/createLoadableRenderer.test.tsx
 
b/superset-frontend/packages/superset-ui-core/test/chart/components/createLoadableRenderer.test.tsx
index 60b11730b03..d0274a21c2d 100644
--- 
a/superset-frontend/packages/superset-ui-core/test/chart/components/createLoadableRenderer.test.tsx
+++ 
b/superset-frontend/packages/superset-ui-core/test/chart/components/createLoadableRenderer.test.tsx
@@ -19,7 +19,6 @@
 
 import '@testing-library/jest-dom';
 import { ComponentType } from 'react';
-import mockConsole, { RestoreConsole } from 'jest-mock-console';
 import { render as renderTestComponent, screen } from '@testing-library/react';
 import createLoadableRenderer, {
   LoadableRenderer as LoadableRendererType,
@@ -33,10 +32,8 @@ describe('createLoadableRenderer', () => {
   let render: (loaded: { Chart: ComponentType }) => JSX.Element;
   let loading: () => JSX.Element;
   let LoadableRenderer: LoadableRendererType<{}>;
-  let restoreConsole: RestoreConsole;
 
   beforeEach(() => {
-    restoreConsole = mockConsole();
     loadChartSuccess = jest.fn(() => Promise.resolve(TestComponent));
     render = jest.fn(loaded => {
       const { Chart } = loaded;
@@ -54,10 +51,6 @@ describe('createLoadableRenderer', () => {
     });
   });
 
-  afterEach(() => {
-    restoreConsole();
-  });
-
   describe('returns a LoadableRenderer class', () => {
     test('LoadableRenderer.preload() preloads the lazy-load components', () => 
{
       expect(LoadableRenderer.preload).toBeInstanceOf(Function);
diff --git 
a/superset-frontend/packages/superset-ui-core/test/models/Registry.test.ts 
b/superset-frontend/packages/superset-ui-core/test/models/Registry.test.ts
index f8e041f07af..6a0228e4cfc 100644
--- a/superset-frontend/packages/superset-ui-core/test/models/Registry.test.ts
+++ b/superset-frontend/packages/superset-ui-core/test/models/Registry.test.ts
@@ -18,11 +18,18 @@
  */
 
 /* eslint no-console: 0 */
-import mockConsole from 'jest-mock-console';
 import { Registry, OverwritePolicy } from '@superset-ui/core';
 
 const loader = () => 'testValue';
 
+const consoleWarnSpy = jest.spyOn(console, 'warn');
+const consoleErrorSpy = jest.spyOn(console, 'error');
+
+beforeEach(() => {
+  consoleErrorSpy.mockClear();
+  consoleWarnSpy.mockClear();
+});
+
 describe('Registry', () => {
   test('exists', () => {
     expect(Registry !== undefined).toBe(true);
@@ -308,18 +315,15 @@ describe('Registry', () => {
     describe('=ALLOW', () => {
       describe('.registerValue(key, value)', () => {
         test('registers normally', () => {
-          const restoreConsole = mockConsole();
           const registry = new Registry();
           registry.registerValue('a', 'testValue');
           expect(() => registry.registerValue('a', 
'testValue2')).not.toThrow();
           expect(registry.get('a')).toEqual('testValue2');
           expect(console.warn).not.toHaveBeenCalled();
-          restoreConsole();
         });
       });
       describe('.registerLoader(key, loader)', () => {
         test('registers normally', () => {
-          const restoreConsole = mockConsole();
           const registry = new Registry();
           registry.registerLoader('a', () => 'testValue');
           expect(() =>
@@ -327,14 +331,12 @@ describe('Registry', () => {
           ).not.toThrow();
           expect(registry.get('a')).toEqual('testValue2');
           expect(console.warn).not.toHaveBeenCalled();
-          restoreConsole();
         });
       });
     });
     describe('=WARN', () => {
       describe('.registerValue(key, value)', () => {
         test('warns when overwrite', () => {
-          const restoreConsole = mockConsole();
           const registry = new Registry({
             overwritePolicy: OverwritePolicy.Warn,
           });
@@ -342,12 +344,10 @@ describe('Registry', () => {
           expect(() => registry.registerValue('a', 
'testValue2')).not.toThrow();
           expect(registry.get('a')).toEqual('testValue2');
           expect(console.warn).toHaveBeenCalled();
-          restoreConsole();
         });
       });
       describe('.registerLoader(key, loader)', () => {
         test('warns when overwrite', () => {
-          const restoreConsole = mockConsole();
           const registry = new Registry({
             overwritePolicy: OverwritePolicy.Warn,
           });
@@ -357,7 +357,6 @@ describe('Registry', () => {
           ).not.toThrow();
           expect(registry.get('a')).toEqual('testValue2');
           expect(console.warn).toHaveBeenCalled();
-          restoreConsole();
         });
       });
     });
@@ -438,14 +437,6 @@ describe('Registry', () => {
     });
 
     describe('with a broken listener', () => {
-      let restoreConsole: any;
-      beforeEach(() => {
-        restoreConsole = mockConsole();
-      });
-      afterEach(() => {
-        restoreConsole();
-      });
-
       test('keeps working', () => {
         const errorListener = jest.fn().mockImplementation(() => {
           throw new Error('test error');

Reply via email to