From 4a79896bb24522df6e349062bf1bbb98e0ec4d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BB=97=20Tr=E1=BB=8Dng=20H=E1=BA=A3i?= <41283691+hainenber@users.noreply.github.com> Date: Tue, 12 May 2026 21:32:08 +0700 Subject: [PATCH] chore(build): replace replaceable `jest-mock-console` with native Jest spies (#38643) Signed-off-by: hainenber --- 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 ------ .../chart/components/SuperChartCore.test.tsx | 11 -------- .../createLoadableRenderer.test.tsx | 7 ------ .../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');