






















@@ -9,6 +9,7 @@ import os from "node:os";
99import path from "node:path";
1010import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
1111import { sendMessage } from "../infra/outbound/message.js";
12+import { captureEnv, deleteTestEnvValue, setTestEnvValue } from "../test-utils/env.js";
1213import { buildSystemRunPreparePayload } from "../test-utils/system-run-prepare-payload.js";
1314import { createExecTool } from "./bash-tools.exec.js";
1415import { callGatewayTool } from "./tools/gateway.js";
@@ -389,10 +390,7 @@ function expectRecordFields(
389390}
390391391392describe("exec approvals", () => {
392-let previousHome: string | undefined;
393-let previousUserProfile: string | undefined;
394-let previousBundledPluginsDir: string | undefined;
395-let previousDisableBundledPlugins: string | undefined;
393+let envSnapshot: ReturnType<typeof captureEnv> | undefined;
396394let tempRoot = "";
397395let tempCaseIndex = 0;
398396@@ -401,43 +399,27 @@ describe("exec approvals", () => {
401399});
402400403401beforeEach(async () => {
404-previousHome = process.env.HOME;
405-previousUserProfile = process.env.USERPROFILE;
406-previousBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
407-previousDisableBundledPlugins = process.env.OPENCLAW_DISABLE_BUNDLED_PLUGINS;
402+envSnapshot = captureEnv([
403+"HOME",
404+"USERPROFILE",
405+"OPENCLAW_BUNDLED_PLUGINS_DIR",
406+"OPENCLAW_DISABLE_BUNDLED_PLUGINS",
407+]);
408408const tempDir = path.join(tempRoot, `case-${++tempCaseIndex}`);
409409await fs.mkdir(tempDir, { recursive: true });
410-process.env.HOME = tempDir;
410+setTestEnvValue("HOME", tempDir);
411411// Windows uses USERPROFILE for os.homedir()
412-process.env.USERPROFILE = tempDir;
413-delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
414-process.env.OPENCLAW_DISABLE_BUNDLED_PLUGINS = "1";
412+setTestEnvValue("USERPROFILE", tempDir);
413+deleteTestEnvValue("OPENCLAW_BUNDLED_PLUGINS_DIR");
414+setTestEnvValue("OPENCLAW_DISABLE_BUNDLED_PLUGINS", "1");
415415vi.mocked(callGatewayTool).mockReset();
416416vi.mocked(sendMessage).mockClear();
417417});
418418419419afterEach(() => {
420420vi.clearAllMocks();
421-if (previousHome === undefined) {
422-delete process.env.HOME;
423-} else {
424-process.env.HOME = previousHome;
425-}
426-if (previousUserProfile === undefined) {
427-delete process.env.USERPROFILE;
428-} else {
429-process.env.USERPROFILE = previousUserProfile;
430-}
431-if (previousBundledPluginsDir === undefined) {
432-delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
433-} else {
434-process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = previousBundledPluginsDir;
435-}
436-if (previousDisableBundledPlugins === undefined) {
437-delete process.env.OPENCLAW_DISABLE_BUNDLED_PLUGINS;
438-} else {
439-process.env.OPENCLAW_DISABLE_BUNDLED_PLUGINS = previousDisableBundledPlugins;
440-}
421+envSnapshot?.restore();
422+envSnapshot = undefined;
441423});
442424443425afterAll(async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。