diff --git a/test/vitest-projects-config.test.ts b/test/vitest-projects-config.test.ts index c27138761a1..f78fbe2af7c 100644 --- a/test/vitest-projects-config.test.ts +++ b/test/vitest-projects-config.test.ts @@ -32,13 +32,32 @@ import { createUnitVitestConfig } from "./vitest/vitest.unit.config.ts"; const patternFiles = createPatternFileHelper("openclaw-vitest-projects-config-"); +function requireTestConfig(config: T): NonNullable { + expect(config.test).toBeDefined(); + if (!config.test) { + throw new Error("expected vitest test config"); + } + return config.test as NonNullable; +} + +function requireWebOptimizer(testConfig: { + deps?: { optimizer?: { web?: { enabled?: boolean } } }; +}) { + const webOptimizer = testConfig.deps?.optimizer?.web; + expect(webOptimizer).toBeDefined(); + if (!webOptimizer) { + throw new Error("expected vitest web optimizer config"); + } + return webOptimizer; +} + afterEach(() => { patternFiles.cleanup(); }); describe("projects vitest config", () => { it("defines the native root project list for all non-live Vitest lanes", () => { - expect(baseConfig.test?.projects).toEqual([...rootVitestProjects]); + expect(requireTestConfig(baseConfig).projects).toEqual([...rootVitestProjects]); }); it("disables vite env-file loading for vitest lanes", () => { @@ -102,11 +121,11 @@ describe("projects vitest config", () => { it("gives contract project configs unique names", () => { expect([ - contractChannelSurfaceConfig.test?.name, - contractChannelConfigConfig.test?.name, - contractChannelRegistryConfig.test?.name, - contractChannelSessionConfig.test?.name, - contractPluginConfig.test?.name, + requireTestConfig(contractChannelSurfaceConfig).name, + requireTestConfig(contractChannelConfigConfig).name, + requireTestConfig(contractChannelRegistryConfig).name, + requireTestConfig(contractChannelSessionConfig).name, + requireTestConfig(contractPluginConfig).name, ]).toEqual([ "contracts-channel-surface", "contracts-channel-config", @@ -150,21 +169,23 @@ describe("projects vitest config", () => { it("keeps the root ui lane aligned with the shared jsdom setup", () => { const config = createUiVitestConfig(); - expect(config.test.environment).toBe("jsdom"); - expect(config.test.isolate).toBe(false); - expect(normalizeConfigPath(config.test.runner)).toBe("test/non-isolated-runner.ts"); - const setupFiles = normalizeConfigPaths(config.test.setupFiles); + const testConfig = requireTestConfig(config); + expect(testConfig.environment).toBe("jsdom"); + expect(testConfig.isolate).toBe(false); + expect(normalizeConfigPath(testConfig.runner)).toBe("test/non-isolated-runner.ts"); + const setupFiles = normalizeConfigPaths(testConfig.setupFiles); expect(setupFiles).not.toContain("test/setup-openclaw-runtime.ts"); expect(setupFiles).toContain("ui/src/test-helpers/lit-warnings.setup.ts"); - expect(config.test.deps?.optimizer?.web?.enabled).toBe(true); + expect(requireWebOptimizer(testConfig).enabled).toBe(true); }); it("keeps the unit-ui shard aligned with the shared jsdom setup", () => { - expect(unitUiConfig.test?.environment).toBe("jsdom"); - expect(unitUiConfig.test?.isolate).toBe(false); - expect(normalizeConfigPath(unitUiConfig.test?.runner)).toBe("test/non-isolated-runner.ts"); + const testConfig = requireTestConfig(unitUiConfig); + expect(testConfig.environment).toBe("jsdom"); + expect(testConfig.isolate).toBe(false); + expect(normalizeConfigPath(testConfig.runner)).toBe("test/non-isolated-runner.ts"); expect(unitUiIncludePatterns).toContain("ui/src/ui/views/dreaming.test.ts"); - const setupFiles = normalizeConfigPaths(unitUiConfig.test?.setupFiles); + const setupFiles = normalizeConfigPaths(testConfig.setupFiles); expect(setupFiles).not.toContain("test/setup-openclaw-runtime.ts"); expect(setupFiles).toContain("ui/src/test-helpers/lit-warnings.setup.ts"); }); @@ -182,8 +203,9 @@ describe("projects vitest config", () => { }); it("keeps the bundled lane on thread workers with the non-isolated runner", () => { - expect(bundledConfig.test?.pool).toBe("threads"); - expect(bundledConfig.test?.isolate).toBe(false); - expect(normalizeConfigPath(bundledConfig.test?.runner)).toBe("test/non-isolated-runner.ts"); + const testConfig = requireTestConfig(bundledConfig); + expect(testConfig.pool).toBe("threads"); + expect(testConfig.isolate).toBe(false); + expect(normalizeConfigPath(testConfig.runner)).toBe("test/non-isolated-runner.ts"); }); });