From 3058bea88f2d58ed5ec0c17e08691df62f6fa08f Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 13 Jun 2022 11:00:07 -0400 Subject: [PATCH] Fix memory leak in unit tests (#5597) --- .swcrc | 18 + package.json | 27 +- ...elm-repository-in-preferences.test.ts.snap | 2 +- .../navigation-to-helm-charts.test.ts.snap | 10 +- ...tom-helm-repository-in-preferences.test.ts | 2 +- ...ion-to-kubernetes-preferences.test.ts.snap | 34 +- src/common/k8s-api/__tests__/kube-api.test.ts | 7 +- src/common/protocol-handler/router.ts | 8 +- src/common/test-utils/flush-promises.ts | 2 +- .../__tests__/extension-loader.test.ts | 58 +- .../extension-discovery.test.ts | 18 +- .../extensions-store/extensions-store.ts | 7 +- src/jest-28-resolver.js | 32 + src/jest.setup.ts | 2 + src/main/__test__/kube-auth-proxy.test.ts | 8 +- .../protocol-handler/__test__/router.test.ts | 54 +- .../lens-protocol-router-main.ts | 10 +- .../components/+add-cluster/add-cluster.tsx | 2 +- .../badge/has-text-selected.injectable.ts | 13 + .../layout/top-bar/close-window.injectable.ts | 15 + .../layout/top-bar/go-back.injectable.ts | 15 + .../layout/top-bar/go-forward.injectable.ts | 15 + .../top-bar/maximize-window.injectable.ts | 15 + .../layout/top-bar/next-enabled.injectable.ts | 18 + .../open-app-context-menu.injectable.ts | 14 + .../layout/top-bar/prev-enabled.injectable.ts | 18 + .../top-bar/start-state-sync.injectable.ts | 34 + .../layout/top-bar/state.injectable.ts | 16 + .../toggle-maximize-window.injectable.ts | 15 + .../layout/top-bar/top-bar-win-linux.test.tsx | 88 - .../layout/top-bar/top-bar.test.tsx | 272 +- .../components/layout/top-bar/top-bar.tsx | 111 +- .../__snapshots__/tooltip.test.tsx.snap | 3 +- .../components/tooltip/tooltip.test.tsx | 17 + src/renderer/components/tooltip/tooltip.tsx | 11 +- src/renderer/getDiForUnitTesting.tsx | 12 +- yarn.lock | 2276 +++++++---------- 37 files changed, 1502 insertions(+), 1777 deletions(-) create mode 100644 .swcrc create mode 100644 src/jest-28-resolver.js create mode 100644 src/renderer/components/badge/has-text-selected.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/close-window.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/go-back.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/go-forward.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/maximize-window.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/next-enabled.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/open-app-context-menu.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/prev-enabled.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/start-state-sync.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/state.injectable.ts create mode 100644 src/renderer/components/layout/top-bar/toggle-maximize-window.injectable.ts delete mode 100644 src/renderer/components/layout/top-bar/top-bar-win-linux.test.tsx diff --git a/.swcrc b/.swcrc new file mode 100644 index 0000000000..742642b7eb --- /dev/null +++ b/.swcrc @@ -0,0 +1,18 @@ +{ + "module": { + "type": "commonjs" + }, + "jsc": { + "parser": { + "syntax": "typescript", + "tsx": true, + "decorators": true, + "dynamicImport": false + }, + "transform": { + "legacyDecorator": true, + "decoratorMetadata": true + }, + "target": "es2019" + } +} diff --git a/package.json b/package.json index b30076ec10..54be0d0766 100644 --- a/package.json +++ b/package.json @@ -59,8 +59,12 @@ "collectCoverage": false, "verbose": true, "transform": { - "^.+\\.tsx?$": "ts-jest" + "^.+\\.(t|j)sx?$": [ + "@swc/jest" + ] }, + "testEnvironment": "jsdom", + "resolver": "/src/jest-28-resolver.js", "moduleNameMapper": { "\\.(css|scss)$": "identity-obj-proxy", "\\.(svg|png|jpg|eot|woff2?|ttf)$": "/__mocks__/assetMock.ts" @@ -76,11 +80,7 @@ "setupFilesAfterEnv": [ "/src/jest-after-env.setup.ts" ], - "globals": { - "ts-jest": { - "isolatedModules": true - } - } + "runtime": "@side/jest-runtime" }, "build": { "generateUpdatesFilesForAllChannels": true, @@ -208,12 +208,13 @@ "@hapi/subtext": "^7.0.3", "@kubernetes/client-node": "^0.16.3", "@material-ui/styles": "^4.11.5", - "@ogre-tools/injectable": "7.1.0", - "@ogre-tools/injectable-react": "7.1.0", "@ogre-tools/fp": "7.1.0", + "@ogre-tools/injectable": "7.1.0", "@ogre-tools/injectable-extension-for-auto-registration": "7.1.0", + "@ogre-tools/injectable-react": "7.1.0", "@sentry/electron": "^3.0.7", "@sentry/integrations": "^6.19.3", + "@side/jest-runtime": "^1.0.0", "@types/circular-dependency-plugin": "5.0.5", "abort-controller": "^3.0.0", "auto-bind": "^4.0.0", @@ -288,6 +289,8 @@ "@material-ui/lab": "^4.0.0-alpha.60", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@sentry/types": "^6.19.7", + "@swc/core": "^1.2.197", + "@swc/jest": "^0.2.21", "@testing-library/dom": "^7.31.2", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^12.1.5", @@ -306,7 +309,7 @@ "@types/gunzip-maybe": "^1.4.0", "@types/html-webpack-plugin": "^3.2.6", "@types/http-proxy": "^1.17.9", - "@types/jest": "^26.0.24", + "@types/jest": "^28.1.1", "@types/js-yaml": "^4.0.5", "@types/jsdom": "^16.2.14", "@types/lodash": "^4.14.181", @@ -374,10 +377,11 @@ "identity-obj-proxy": "^3.0.0", "ignore-loader": "^0.1.2", "include-media": "^1.4.9", - "jest": "26.6.3", + "jest": "^28.1.1", "jest-canvas-mock": "^2.3.1", + "jest-environment-jsdom": "^28.1.1", "jest-fetch-mock": "^3.0.3", - "jest-mock-extended": "^1.0.18", + "jest-mock-extended": "^2.0.6", "make-plural": "^6.2.2", "mini-css-extract-plugin": "^2.6.0", "mock-http": "^1.1.0", @@ -402,7 +406,6 @@ "style-loader": "^3.3.1", "tailwindcss": "^3.0.23", "tar-stream": "^2.2.0", - "ts-jest": "26.5.6", "ts-loader": "^9.2.8", "ts-node": "^10.7.0", "type-fest": "^2.13.0", diff --git a/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap index 35db1088d9..1b1d3a51cc 100644 --- a/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap +++ b/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap @@ -4518,7 +4518,7 @@ exports[`add custom helm repository in preferences when navigating to preference class="flex gaps align-center" >
+ class="NoItems flex box grow" + > +
+ Item list is empty +
+
{ let getActiveHelmRepositoriesMock: AsyncFnMock<() => AsyncResult>; beforeEach(async () => { - jest.useFakeTimers("modern"); + jest.useFakeTimers(); applicationBuilder = getApplicationBuilder(); diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap index 9fbc6388b9..14884cc04d 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap @@ -840,7 +840,7 @@ exports[`preferences - navigation to kubernetes preferences given in preferences class="flex gaps" >
-