
























@@ -0,0 +1,88 @@
1+import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2+import { tmpdir } from "node:os";
3+import path from "node:path";
4+import { afterEach, describe, expect, it } from "vitest";
5+import {
6+ensureCliStartupBuild,
7+hasCliStartupBuild,
8+} from "../../scripts/ensure-cli-startup-build.mjs";
9+10+const tempRoots: string[] = [];
11+12+function makeTempRoot(): string {
13+const root = mkdtempSync(path.join(tmpdir(), "openclaw-cli-startup-build-"));
14+tempRoots.push(root);
15+mkdirSync(path.join(root, "scripts"), { recursive: true });
16+writeFileSync(path.join(root, "scripts", "build-all.mjs"), "", "utf8");
17+return root;
18+}
19+20+afterEach(() => {
21+for (const root of tempRoots.splice(0)) {
22+rmSync(root, { recursive: true, force: true });
23+}
24+});
25+26+describe("ensure-cli-startup-build", () => {
27+it("detects an existing CLI startup build", () => {
28+const root = makeTempRoot();
29+mkdirSync(path.join(root, "dist"), { recursive: true });
30+writeFileSync(path.join(root, "dist", "entry.js"), "export {};\n", "utf8");
31+32+expect(hasCliStartupBuild({ rootDir: root })).toBe(true);
33+});
34+35+it("skips the build profile when dist entry output already exists", () => {
36+const root = makeTempRoot();
37+mkdirSync(path.join(root, "dist"), { recursive: true });
38+writeFileSync(path.join(root, "dist", "entry.mjs"), "export {};\n", "utf8");
39+40+const result = ensureCliStartupBuild({
41+rootDir: root,
42+spawnSync: () => {
43+throw new Error("unexpected build");
44+},
45+});
46+47+expect(result).toEqual({ built: false });
48+});
49+50+it("runs the cliStartup build profile when dist entry output is missing", () => {
51+const root = makeTempRoot();
52+const calls: unknown[] = [];
53+54+const result = ensureCliStartupBuild({
55+rootDir: root,
56+nodeExecPath: "/node",
57+spawnSync: (command, args, options) => {
58+calls.push({ command, args, options });
59+return { status: 0 };
60+},
61+stdio: "pipe",
62+});
63+64+expect(result).toEqual({ built: true });
65+expect(calls).toEqual([
66+{
67+command: "/node",
68+args: [path.join(root, "scripts", "build-all.mjs"), "cliStartup"],
69+options: expect.objectContaining({
70+cwd: root,
71+stdio: "pipe",
72+}),
73+},
74+]);
75+});
76+77+it("fails when the cliStartup build profile fails", () => {
78+const root = makeTempRoot();
79+80+expect(() =>
81+ensureCliStartupBuild({
82+rootDir: root,
83+spawnSync: () => ({ status: 1 }),
84+stdio: "pipe",
85+}),
86+).toThrow("cliStartup build profile failed with exit code 1");
87+});
88+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。