diff --git a/src/jest.setup.ts b/src/jest.setup.ts index 1e7d0a8ce3..4e9b86ba22 100644 --- a/src/jest.setup.ts +++ b/src/jest.setup.ts @@ -10,6 +10,16 @@ import glob from "glob"; import path from "path"; import { enableMapSet, setAutoFreeze } from "immer"; +declare global { + interface InjectablePaths { + paths: string[]; + globalOverridePaths: string[]; + } + + // eslint-disable-next-line no-var + var injectablePaths: Record<"main" | "renderer", InjectablePaths>; +} + configure({ // Needed because we want to use jest.spyOn() // ref https://github.com/mobxjs/mobx/issues/2784 @@ -57,7 +67,13 @@ const getInjectables = (environment: "renderer" | "main", filePathGlob: string) }), ].map(x => path.resolve(__dirname, x)); -(global as any).rendererInjectablePaths = getInjectables("renderer", "*.{injectable,injectable.testing-env}.{ts,tsx}"); -(global as any).rendererGlobalOverridePaths = getInjectables("renderer", "*.global-override-for-injectable.{ts,tsx}"); -(global as any).mainInjectablePaths = getInjectables("main", "*.{injectable,injectable.testing-env}.{ts,tsx}"); -(global as any).mainGlobalOverridePaths = getInjectables("main", "*.global-override-for-injectable.{ts,tsx}"); +global.injectablePaths = { + renderer: { + globalOverridePaths: getInjectables("renderer", "*.global-override-for-injectable.{ts,tsx}"), + paths: getInjectables("renderer", "*.{injectable,injectable.testing-env}.{ts,tsx}"), + }, + main: { + globalOverridePaths: getInjectables("main", "*.global-override-for-injectable.{ts,tsx}"), + paths: getInjectables("main", "*.{injectable,injectable.testing-env}.{ts,tsx}"), + }, +}; diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index 12ae52c667..a6c5b77a0e 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -77,13 +77,12 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) di.preventSideEffects(); - const injectables: Injectable[] = ( - global as any - ).mainInjectablePaths.flatMap((filePath: string) => - Object.values(require(filePath)).filter( - (maybeInjectable: any) => isInjectable(maybeInjectable), - ), - ); + const injectables = ( + global.injectablePaths.main.paths + .map(path => require(path)) + .flatMap(Object.values) + .filter(isInjectable) + ) as Injectable[]; runInAction(() => { registerMobX(di); @@ -95,13 +94,11 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) }); if (doGeneralOverrides) { - const globalOverrides: GlobalOverride[] = (global as any).mainGlobalOverridePaths.map( - (filePath: string) => require(filePath).default, - ); + for (const globalOverridePath of global.injectablePaths.main.globalOverridePaths) { + const globalOverride = require(globalOverridePath).default as GlobalOverride; - globalOverrides.forEach(globalOverride => { di.override(globalOverride.injectable, globalOverride.overridingInstantiate); - }); + } di.override(electronInjectable, () => ({})); di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {}); diff --git a/src/renderer/getDiForUnitTesting.tsx b/src/renderer/getDiForUnitTesting.tsx index 12345c9558..e16b12d50e 100644 --- a/src/renderer/getDiForUnitTesting.tsx +++ b/src/renderer/getDiForUnitTesting.tsx @@ -20,7 +20,6 @@ import platformInjectable from "../common/vars/platform.injectable"; import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable"; -import setupSystemCaInjectable from "./frames/root-frame/setup-system-ca.injectable"; import extensionShouldBeEnabledForClusterFrameInjectable from "./extension-loader/extension-should-be-enabled-for-cluster-frame.injectable"; import { asyncComputed } from "@ogre-tools/injectable-react"; import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable"; @@ -47,13 +46,12 @@ export const getDiForUnitTesting = ( setLegacyGlobalDiForExtensionApi(di, Environments.renderer); - const injectables: Injectable[] = ( - global as any - ).rendererInjectablePaths.flatMap((filePath: string) => - Object.values(require(filePath)).filter( - (maybeInjectable: any) => isInjectable(maybeInjectable), - ), - ); + const injectables = ( + global.injectablePaths.renderer.paths + .map(path => require(path)) + .flatMap(Object.values) + .filter(isInjectable) + ) as Injectable[]; runInAction(() => { registerMobX(di); @@ -65,20 +63,17 @@ export const getDiForUnitTesting = ( }); if (doGeneralOverrides) { - const globalOverrides: GlobalOverride[] = (global as any).rendererGlobalOverridePaths.map( - (filePath: string) => require(filePath).default, - ); + for (const globalOverridePath of global.injectablePaths.renderer.globalOverridePaths) { + const globalOverride = require(globalOverridePath).default as GlobalOverride; - globalOverrides.forEach(globalOverride => { di.override(globalOverride.injectable, globalOverride.overridingInstantiate); - }); + } di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id"); di.override(platformInjectable, () => "darwin"); [ startTopbarStateSyncInjectable, - setupSystemCaInjectable, ].forEach((injectable) => { di.override(injectable, () => ({ id: injectable.id,