mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-09 05:47:29 +08:00
* fix(test): make unit tests hermetic against host config and build state Two host-state leaks made the full suite fail deterministically on developer and agent machines while CI stayed green: - Built checkouts: bundled-plugin manifest discovery prefers dist/extensions, which by design excludes externalized official plugins (e.g. qwen). Tests that depend on manifest-driven endpoint classification (DashScope cases in media-understanding and model-compat) failed in any checkout after pnpm build. test-env now pins OPENCLAW_BUNDLED_PLUGINS_DIR to the source extensions tree (with the vitest trust opt-in) so discovery matches CI regardless of local build state; discovery tests keep managing the env per case. - unit-fast shards: setupFiles was empty, so auto-curated tests that read config saw the developer's real ~/.openclaw/openclaw.json; any key the branch schema rejects failed those tests. unit-fast and unit-fast-fake-timers now load a minimal env-isolation setup (test/setup.env.ts) that installs the isolated test home without the shared setup's module mocks. * test: update unit-fast config contract for env-isolation setup * fix(test): force unit-fast hermetic env isolation
32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
// Env-only isolation for fast shards that intentionally skip the full shared
|
|
// setup (no module mocks, no custom runner). unit-fast runs isolate:false with
|
|
// auto-curated membership, so without this any test that reads config/state
|
|
// sees the developer's real ~/.openclaw (e.g. an openclaw.json key the branch
|
|
// schema rejects deterministically fails schema-reading tests locally while CI
|
|
// stays green).
|
|
import { installTestEnv } from "./test-env.js";
|
|
|
|
process.env.VITEST = "true";
|
|
|
|
const ENV_ISOLATION_SETUP = Symbol.for("openclaw.envIsolationTestSetup");
|
|
|
|
type EnvIsolationHandle = { cleanup: () => void };
|
|
|
|
const globalState = globalThis as typeof globalThis & {
|
|
[ENV_ISOLATION_SETUP]?: EnvIsolationHandle;
|
|
};
|
|
|
|
if (!globalState[ENV_ISOLATION_SETUP]) {
|
|
// unit-fast is never a live lane, even when its parent shell exports live flags.
|
|
// Hermetic mode prevents real or staged credentials/config from entering the worker.
|
|
const testEnv = installTestEnv({ mode: "hermetic" });
|
|
const handle: EnvIsolationHandle = {
|
|
cleanup: () => {
|
|
testEnv.cleanup();
|
|
delete globalState[ENV_ISOLATION_SETUP];
|
|
},
|
|
};
|
|
process.once("exit", handle.cleanup);
|
|
globalState[ENV_ISOLATION_SETUP] = handle;
|
|
}
|