


























@@ -32,13 +32,32 @@ import { createUnitVitestConfig } from "./vitest/vitest.unit.config.ts";
32323333const patternFiles = createPatternFileHelper("openclaw-vitest-projects-config-");
343435+function requireTestConfig<T extends { test?: unknown }>(config: T): NonNullable<T["test"]> {
36+expect(config.test).toBeDefined();
37+if (!config.test) {
38+throw new Error("expected vitest test config");
39+}
40+return config.test as NonNullable<T["test"]>;
41+}
42+43+function requireWebOptimizer(testConfig: {
44+deps?: { optimizer?: { web?: { enabled?: boolean } } };
45+}) {
46+const webOptimizer = testConfig.deps?.optimizer?.web;
47+expect(webOptimizer).toBeDefined();
48+if (!webOptimizer) {
49+throw new Error("expected vitest web optimizer config");
50+}
51+return webOptimizer;
52+}
53+3554afterEach(() => {
3655patternFiles.cleanup();
3756});
38573958describe("projects vitest config", () => {
4059it("defines the native root project list for all non-live Vitest lanes", () => {
41-expect(baseConfig.test?.projects).toEqual([...rootVitestProjects]);
60+expect(requireTestConfig(baseConfig).projects).toEqual([...rootVitestProjects]);
4261});
43624463it("disables vite env-file loading for vitest lanes", () => {
@@ -102,11 +121,11 @@ describe("projects vitest config", () => {
102121103122it("gives contract project configs unique names", () => {
104123expect([
105-contractChannelSurfaceConfig.test?.name,
106-contractChannelConfigConfig.test?.name,
107-contractChannelRegistryConfig.test?.name,
108-contractChannelSessionConfig.test?.name,
109-contractPluginConfig.test?.name,
124+requireTestConfig(contractChannelSurfaceConfig).name,
125+requireTestConfig(contractChannelConfigConfig).name,
126+requireTestConfig(contractChannelRegistryConfig).name,
127+requireTestConfig(contractChannelSessionConfig).name,
128+requireTestConfig(contractPluginConfig).name,
110129]).toEqual([
111130"contracts-channel-surface",
112131"contracts-channel-config",
@@ -150,21 +169,23 @@ describe("projects vitest config", () => {
150169151170it("keeps the root ui lane aligned with the shared jsdom setup", () => {
152171const config = createUiVitestConfig();
153-expect(config.test.environment).toBe("jsdom");
154-expect(config.test.isolate).toBe(false);
155-expect(normalizeConfigPath(config.test.runner)).toBe("test/non-isolated-runner.ts");
156-const setupFiles = normalizeConfigPaths(config.test.setupFiles);
172+const testConfig = requireTestConfig(config);
173+expect(testConfig.environment).toBe("jsdom");
174+expect(testConfig.isolate).toBe(false);
175+expect(normalizeConfigPath(testConfig.runner)).toBe("test/non-isolated-runner.ts");
176+const setupFiles = normalizeConfigPaths(testConfig.setupFiles);
157177expect(setupFiles).not.toContain("test/setup-openclaw-runtime.ts");
158178expect(setupFiles).toContain("ui/src/test-helpers/lit-warnings.setup.ts");
159-expect(config.test.deps?.optimizer?.web?.enabled).toBe(true);
179+expect(requireWebOptimizer(testConfig).enabled).toBe(true);
160180});
161181162182it("keeps the unit-ui shard aligned with the shared jsdom setup", () => {
163-expect(unitUiConfig.test?.environment).toBe("jsdom");
164-expect(unitUiConfig.test?.isolate).toBe(false);
165-expect(normalizeConfigPath(unitUiConfig.test?.runner)).toBe("test/non-isolated-runner.ts");
183+const testConfig = requireTestConfig(unitUiConfig);
184+expect(testConfig.environment).toBe("jsdom");
185+expect(testConfig.isolate).toBe(false);
186+expect(normalizeConfigPath(testConfig.runner)).toBe("test/non-isolated-runner.ts");
166187expect(unitUiIncludePatterns).toContain("ui/src/ui/views/dreaming.test.ts");
167-const setupFiles = normalizeConfigPaths(unitUiConfig.test?.setupFiles);
188+const setupFiles = normalizeConfigPaths(testConfig.setupFiles);
168189expect(setupFiles).not.toContain("test/setup-openclaw-runtime.ts");
169190expect(setupFiles).toContain("ui/src/test-helpers/lit-warnings.setup.ts");
170191});
@@ -182,8 +203,9 @@ describe("projects vitest config", () => {
182203});
183204184205it("keeps the bundled lane on thread workers with the non-isolated runner", () => {
185-expect(bundledConfig.test?.pool).toBe("threads");
186-expect(bundledConfig.test?.isolate).toBe(false);
187-expect(normalizeConfigPath(bundledConfig.test?.runner)).toBe("test/non-isolated-runner.ts");
206+const testConfig = requireTestConfig(bundledConfig);
207+expect(testConfig.pool).toBe("threads");
208+expect(testConfig.isolate).toBe(false);
209+expect(normalizeConfigPath(testConfig.runner)).toBe("test/non-isolated-runner.ts");
188210});
189211});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。