




















@@ -2,6 +2,7 @@ import fs from "node:fs/promises";
22import os from "node:os";
33import path from "node:path";
44import { afterAll, beforeAll, vi, type Mock } from "vitest";
5+import { captureEnv } from "../test-utils/env.js";
56import { withFastReplyConfig } from "./reply/get-reply-fast-path.js";
6778type ReplyRuntimeMocks = {
@@ -119,35 +120,14 @@ vi.mock("./reply/agent-runner.runtime.js", () => ({
119120},
120121}));
121122122-type HomeEnvSnapshot = {
123-HOME: string | undefined;
124-USERPROFILE: string | undefined;
125-HOMEDRIVE: string | undefined;
126-HOMEPATH: string | undefined;
127-OPENCLAW_STATE_DIR: string | undefined;
128-OPENCLAW_AGENT_DIR: string | undefined;
129-};
130-131-function snapshotHomeEnv(): HomeEnvSnapshot {
132-return {
133-HOME: process.env.HOME,
134-USERPROFILE: process.env.USERPROFILE,
135-HOMEDRIVE: process.env.HOMEDRIVE,
136-HOMEPATH: process.env.HOMEPATH,
137-OPENCLAW_STATE_DIR: process.env.OPENCLAW_STATE_DIR,
138-OPENCLAW_AGENT_DIR: process.env.OPENCLAW_AGENT_DIR,
139-};
140-}
141-142-function restoreHomeEnv(snapshot: HomeEnvSnapshot) {
143-for (const [key, value] of Object.entries(snapshot)) {
144-if (value === undefined) {
145-delete process.env[key];
146-} else {
147-process.env[key] = value;
148-}
149-}
150-}
123+const HOME_ENV_KEYS = [
124+"HOME",
125+"USERPROFILE",
126+"HOMEDRIVE",
127+"HOMEPATH",
128+"OPENCLAW_STATE_DIR",
129+"OPENCLAW_AGENT_DIR",
130+] as const;
151131152132export function createTempHomeHarness(options: { prefix: string; beforeEachCase?: () => void }) {
153133let fixtureRoot = "";
@@ -167,7 +147,7 @@ export function createTempHomeHarness(options: { prefix: string; beforeEachCase?
167147async function withTempHome<T>(fn: (home: string) => Promise<T>): Promise<T> {
168148const home = path.join(fixtureRoot, `case-${++caseId}`);
169149await fs.mkdir(path.join(home, ".openclaw", "agents", "main", "sessions"), { recursive: true });
170-const envSnapshot = snapshotHomeEnv();
150+const envSnapshot = captureEnv([...HOME_ENV_KEYS]);
171151process.env.HOME = home;
172152process.env.USERPROFILE = home;
173153process.env.OPENCLAW_STATE_DIR = path.join(home, ".openclaw");
@@ -185,7 +165,7 @@ export function createTempHomeHarness(options: { prefix: string; beforeEachCase?
185165options.beforeEachCase?.();
186166return await fn(home);
187167} finally {
188-restoreHomeEnv(envSnapshot);
168+envSnapshot.restore();
189169}
190170}
191171此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。