






















@@ -5,6 +5,7 @@ import { createRequire } from "node:module";
55import os from "node:os";
66import path from "node:path";
77import JSON5 from "json5";
8+import { deleteTestEnvValue, setTestEnvValue } from "../src/test-utils/env.js";
89910type RestoreEntry = { key: string; value: string | undefined };
1011@@ -44,9 +45,9 @@ function isTruthyEnvValue(value: string | undefined): boolean {
4445function restoreEnv(entries: RestoreEntry[]): void {
4546for (const { key, value } of entries) {
4647if (value === undefined) {
47-delete process.env[key];
48+deleteTestEnvValue(key);
4849} else {
49-process.env[key] = value;
50+setTestEnvValue(key, value);
5051}
5152}
5253}
@@ -90,7 +91,7 @@ function loadProfileEnv(homeDir = os.homedir()): void {
9091if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(key) || (process.env[key] ?? "") !== "") {
9192return false;
9293}
93-process.env[key] = entry.slice(idx + 1);
94+setTestEnvValue(key, entry.slice(idx + 1));
9495return true;
9596};
9697const countAppliedEntries = (entries: Iterable<string>) => {
@@ -193,45 +194,45 @@ function createIsolatedTestHome(restore: RestoreEntry[]): {
193194} {
194195const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-test-home-"));
195196196-process.env.HOME = tempHome;
197-process.env.USERPROFILE = tempHome;
198-process.env.OPENCLAW_TEST_HOME = tempHome;
199-process.env.OPENCLAW_TEST_FAST = "1";
200-process.env.OPENCLAW_STRICT_FAST_REPLY_CONFIG = "1";
201-delete process.env.OPENCLAW_ALLOW_SLOW_REPLY_TESTS;
197+setTestEnvValue("HOME", tempHome);
198+setTestEnvValue("USERPROFILE", tempHome);
199+setTestEnvValue("OPENCLAW_TEST_HOME", tempHome);
200+setTestEnvValue("OPENCLAW_TEST_FAST", "1");
201+setTestEnvValue("OPENCLAW_STRICT_FAST_REPLY_CONFIG", "1");
202+deleteTestEnvValue("OPENCLAW_ALLOW_SLOW_REPLY_TESTS");
202203203204// Ensure test runs never touch the developer's real config/state, even if they have overrides set.
204-delete process.env.OPENCLAW_CONFIG_PATH;
205+deleteTestEnvValue("OPENCLAW_CONFIG_PATH");
205206// Prefer deriving state dir from HOME so nested tests that change HOME also isolate correctly.
206-delete process.env.OPENCLAW_STATE_DIR;
207-delete process.env.OPENCLAW_AGENT_DIR;
207+deleteTestEnvValue("OPENCLAW_STATE_DIR");
208+deleteTestEnvValue("OPENCLAW_AGENT_DIR");
208209// Prefer test-controlled ports over developer overrides (avoid port collisions across tests/workers).
209-delete process.env.OPENCLAW_GATEWAY_PORT;
210-delete process.env.OPENCLAW_BRIDGE_ENABLED;
211-delete process.env.OPENCLAW_BRIDGE_HOST;
212-delete process.env.OPENCLAW_BRIDGE_PORT;
213-delete process.env.OPENCLAW_CANVAS_HOST_PORT;
210+deleteTestEnvValue("OPENCLAW_GATEWAY_PORT");
211+deleteTestEnvValue("OPENCLAW_BRIDGE_ENABLED");
212+deleteTestEnvValue("OPENCLAW_BRIDGE_HOST");
213+deleteTestEnvValue("OPENCLAW_BRIDGE_PORT");
214+deleteTestEnvValue("OPENCLAW_CANVAS_HOST_PORT");
214215// Avoid leaking real GitHub/Copilot tokens into non-live test runs.
215-delete process.env.TELEGRAM_BOT_TOKEN;
216-delete process.env.DISCORD_BOT_TOKEN;
217-delete process.env.SLACK_BOT_TOKEN;
218-delete process.env.SLACK_APP_TOKEN;
219-delete process.env.SLACK_USER_TOKEN;
220-delete process.env.COPILOT_GITHUB_TOKEN;
221-delete process.env.GH_TOKEN;
222-delete process.env.GITHUB_TOKEN;
216+deleteTestEnvValue("TELEGRAM_BOT_TOKEN");
217+deleteTestEnvValue("DISCORD_BOT_TOKEN");
218+deleteTestEnvValue("SLACK_BOT_TOKEN");
219+deleteTestEnvValue("SLACK_APP_TOKEN");
220+deleteTestEnvValue("SLACK_USER_TOKEN");
221+deleteTestEnvValue("COPILOT_GITHUB_TOKEN");
222+deleteTestEnvValue("GH_TOKEN");
223+deleteTestEnvValue("GITHUB_TOKEN");
223224// Avoid leaking local dev tooling flags into tests (e.g. --inspect).
224-delete process.env.NODE_OPTIONS;
225+deleteTestEnvValue("NODE_OPTIONS");
225226226227// Windows: prefer the default state dir so auth/profile tests match real paths.
227228if (process.platform === "win32") {
228-process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw");
229+setTestEnvValue("OPENCLAW_STATE_DIR", path.join(tempHome, ".openclaw"));
229230}
230231231-process.env.XDG_CONFIG_HOME = path.join(tempHome, ".config");
232-process.env.XDG_DATA_HOME = path.join(tempHome, ".local", "share");
233-process.env.XDG_STATE_HOME = path.join(tempHome, ".local", "state");
234-process.env.XDG_CACHE_HOME = path.join(tempHome, ".cache");
232+setTestEnvValue("XDG_CONFIG_HOME", path.join(tempHome, ".config"));
233+setTestEnvValue("XDG_DATA_HOME", path.join(tempHome, ".local", "share"));
234+setTestEnvValue("XDG_STATE_HOME", path.join(tempHome, ".local", "state"));
235+setTestEnvValue("XDG_CACHE_HOME", path.join(tempHome, ".cache"));
235236236237const cleanup = () => {
237238restoreEnv(restore);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。