


























@@ -163,12 +163,10 @@ describe("installSkill code safety scanning", () => {
163163164164expect(result.ok).toBe(false);
165165expect(result.message).toContain('Skill "danger-skill" installation blocked');
166-expect(result.warnings ?? []).toEqual(
167-expect.arrayContaining([
168-expect.stringContaining("dangerous code patterns"),
169-expect.stringContaining("runner.js:1"),
170-]),
171-);
166+expect(
167+(result.warnings ?? []).some((warning) => warning.includes("dangerous code patterns")),
168+).toBe(true);
169+expect((result.warnings ?? []).some((warning) => warning.includes("runner.js:1"))).toBe(true);
172170expect(runCommandWithTimeoutMock).not.toHaveBeenCalled();
173171});
174172});
@@ -211,10 +209,8 @@ describe("installSkill code safety scanning", () => {
211209const call = runCommandWithTimeoutMock.mock.calls.at(-1);
212210expect(call?.[0]).toEqual(["npm", "install", "-g", "--ignore-scripts", "example-package"]);
213211const options = call?.[1] as { env?: NodeJS.ProcessEnv };
214-expect(options.env).toMatchObject({
215-NPM_CONFIG_PREFIX: npmPrefix,
216-npm_config_prefix: npmPrefix,
217-});
212+expect(options.env?.NPM_CONFIG_PREFIX).toBe(npmPrefix);
213+expect(options.env?.npm_config_prefix).toBe(npmPrefix);
218214expect(options.env).not.toHaveProperty("PATH");
219215const stat = await fs.stat(npmPrefix);
220216expect(stat.isDirectory()).toBe(true);
@@ -291,28 +287,35 @@ describe("installSkill code safety scanning", () => {
291287292288expect(result.ok).toBe(true);
293289expect(handler).toHaveBeenCalledTimes(1);
294-expect(handler.mock.calls[0]?.[0]).toMatchObject({
295-targetName: "policy-skill",
296-targetType: "skill",
297-origin: "openclaw-workspace",
298-sourcePath: expect.stringContaining("policy-skill"),
299-sourcePathKind: "directory",
300-request: {
301-kind: "skill-install",
302-mode: "install",
303-},
304-builtinScan: {
305-status: "ok",
306-findings: [],
307-},
308-skill: {
309-installId: "deps",
310-installSpec: expect.objectContaining({
311-kind: "node",
312-package: "example-package",
313-}),
314-},
290+const payload = handler.mock.calls[0]?.[0] as
291+| {
292+targetName?: string;
293+targetType?: string;
294+origin?: string;
295+sourcePath?: string;
296+sourcePathKind?: string;
297+request?: { kind?: string; mode?: string };
298+builtinScan?: { status?: string; findings?: unknown[] };
299+skill?: {
300+installId?: string;
301+installSpec?: { kind?: string; package?: string };
302+};
303+}
304+| undefined;
305+expect(payload?.targetName).toBe("policy-skill");
306+expect(payload?.targetType).toBe("skill");
307+expect(payload?.origin).toBe("openclaw-workspace");
308+expect(payload?.sourcePath).toContain("policy-skill");
309+expect(payload?.sourcePathKind).toBe("directory");
310+expect(payload?.request).toEqual({
311+kind: "skill-install",
312+mode: "install",
315313});
314+expect(payload?.builtinScan?.status).toBe("ok");
315+expect(payload?.builtinScan?.findings).toEqual([]);
316+expect(payload?.skill?.installId).toBe("deps");
317+expect(payload?.skill?.installSpec?.kind).toBe("node");
318+expect(payload?.skill?.installSpec?.package).toBe("example-package");
316319expect(handler.mock.calls[0]?.[1]).toEqual({
317320origin: "openclaw-workspace",
318321targetType: "skill",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。