




















@@ -4,6 +4,7 @@ import os from "node:os";
44import path from "node:path";
55import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
66import { note } from "../../../packages/terminal-core/src/note.js";
7+import { captureEnv, deleteTestEnvValue, setTestEnvValue } from "../../test-utils/env.js";
78import { formatCliCommand } from "../command-format.js";
89import { ensureConfigReady, testApi } from "./config-guard.js";
910@@ -72,10 +73,8 @@ async function withCapturedStdout(run: () => Promise<void>): Promise<string> {
72737374describe("ensureConfigReady", () => {
7475const resetConfigGuardStateForTests = testApi.resetConfigGuardStateForTests;
75-const originalHome = process.env.HOME;
76-const originalOpenClawHome = process.env.OPENCLAW_HOME;
77-const originalOpenClawStateDir = process.env.OPENCLAW_STATE_DIR;
7876const tempRoots: string[] = [];
77+let envSnapshot: ReturnType<typeof captureEnv> | undefined;
79788079async function runEnsureConfigReady(commandPath: string[], suppressDoctorStdout = false) {
8180const runtime = makeRuntime();
@@ -101,8 +100,8 @@ describe("ensureConfigReady", () => {
101100function useTempOpenClawHome(): string {
102101const root = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-config-guard-"));
103102tempRoots.push(root);
104-process.env.OPENCLAW_HOME = root;
105-delete process.env.OPENCLAW_STATE_DIR;
103+setTestEnvValue("OPENCLAW_HOME", root);
104+deleteTestEnvValue("OPENCLAW_STATE_DIR");
106105return root;
107106}
108107@@ -126,13 +125,9 @@ describe("ensureConfigReady", () => {
126125}
127126128127beforeEach(() => {
128+envSnapshot = captureEnv(["HOME", "OPENCLAW_HOME", "OPENCLAW_STATE_DIR"]);
129129vi.clearAllMocks();
130130resetConfigGuardStateForTests();
131-if (originalHome === undefined) {
132-delete process.env.HOME;
133-} else {
134-process.env.HOME = originalHome;
135-}
136131for (const root of tempRoots.splice(0)) {
137132fs.rmSync(root, { recursive: true, force: true });
138133}
@@ -145,21 +140,8 @@ describe("ensureConfigReady", () => {
145140});
146141147142afterEach(() => {
148-if (originalHome === undefined) {
149-delete process.env.HOME;
150-} else {
151-process.env.HOME = originalHome;
152-}
153-if (originalOpenClawHome === undefined) {
154-delete process.env.OPENCLAW_HOME;
155-} else {
156-process.env.OPENCLAW_HOME = originalOpenClawHome;
157-}
158-if (originalOpenClawStateDir === undefined) {
159-delete process.env.OPENCLAW_STATE_DIR;
160-} else {
161-process.env.OPENCLAW_STATE_DIR = originalOpenClawStateDir;
162-}
143+envSnapshot?.restore();
144+envSnapshot = undefined;
163145for (const root of tempRoots.splice(0)) {
164146fs.rmSync(root, { recursive: true, force: true });
165147}
@@ -250,7 +232,7 @@ describe("ensureConfigReady", () => {
250232it("runs doctor flow before agent commands when default exec approvals must move to a custom state dir", async () => {
251233const root = useTempOpenClawHome();
252234const stateDir = path.join(root, "custom-state");
253-process.env.OPENCLAW_STATE_DIR = stateDir;
235+setTestEnvValue("OPENCLAW_STATE_DIR", stateDir);
254236writeStateMarker(root, "exec-approvals.json");
255237256238await runEnsureConfigReady(["agent"]);
@@ -288,9 +270,9 @@ describe("ensureConfigReady", () => {
288270it("uses shared tilde expansion for OPENCLAW_HOME in the startup detector", async () => {
289271const root = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-config-guard-home-"));
290272tempRoots.push(root);
291-process.env.HOME = root;
292-process.env.OPENCLAW_HOME = "~/svc";
293-delete process.env.OPENCLAW_STATE_DIR;
273+setTestEnvValue("HOME", root);
274+setTestEnvValue("OPENCLAW_HOME", "~/svc");
275+deleteTestEnvValue("OPENCLAW_STATE_DIR");
294276writeLegacyTaskSidecarMarker(path.join(root, "svc"));
295277296278await runEnsureConfigReady(["status"]);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。