

















@@ -47,6 +47,10 @@ function issueMessages(issues: Array<{ message: string }>): string[] {
4747return issues.map((issue) => issue.message);
4848}
494950+function expectSomeIssueMessageContains(issues: Array<{ message: string }>, text: string): void {
51+expect(issueMessages(issues).some((message) => message.includes(text))).toBe(true);
52+}
53+5054describe("boolean config validation", () => {
5155it.each(nonBooleanConfigCases)("rejects non-boolean values for $name", ({ config }) => {
5256const result = OpenClawSchema.safeParse(config);
@@ -1024,11 +1028,9 @@ describe("config strict validation", () => {
10241028const snap = await readConfigFileSnapshot();
1025102910261030expect(snap.valid).toBe(false);
1027-expect(issueMessages(snap.issues)).toEqual(
1028-expect.arrayContaining([expect.stringContaining('"memorySearch"')]),
1029-);
1031+expectSomeIssueMessageContains(snap.issues, '"memorySearch"');
10301032expect(issuePaths(snap.legacyIssues)).toContain("memorySearch");
1031-expect((snap.sourceConfig as { memorySearch?: unknown }).memorySearch).toMatchObject({
1033+expect((snap.sourceConfig as { memorySearch?: unknown }).memorySearch).toEqual({
10321034provider: "local",
10331035fallback: "none",
10341036query: { maxResults: 7 },
@@ -1049,11 +1051,9 @@ describe("config strict validation", () => {
10491051const snap = await readConfigFileSnapshot();
1050105210511053expect(snap.valid).toBe(false);
1052-expect(issueMessages(snap.issues)).toEqual(
1053-expect.arrayContaining([expect.stringContaining('"heartbeat"')]),
1054-);
1054+expectSomeIssueMessageContains(snap.issues, '"heartbeat"');
10551055expect(issuePaths(snap.legacyIssues)).toContain("heartbeat");
1056-expect((snap.sourceConfig as { heartbeat?: unknown }).heartbeat).toMatchObject({
1056+expect((snap.sourceConfig as { heartbeat?: unknown }).heartbeat).toEqual({
10571057every: "30m",
10581058model: "anthropic/claude-3-5-haiku-20241022",
10591059});
@@ -1074,11 +1074,9 @@ describe("config strict validation", () => {
10741074const snap = await readConfigFileSnapshot();
1075107510761076expect(snap.valid).toBe(false);
1077-expect(issueMessages(snap.issues)).toEqual(
1078-expect.arrayContaining([expect.stringContaining('"heartbeat"')]),
1079-);
1077+expectSomeIssueMessageContains(snap.issues, '"heartbeat"');
10801078expect(issuePaths(snap.legacyIssues)).toContain("heartbeat");
1081-expect((snap.sourceConfig as { heartbeat?: unknown }).heartbeat).toMatchObject({
1079+expect((snap.sourceConfig as { heartbeat?: unknown }).heartbeat).toEqual({
10821080showOk: true,
10831081showAlerts: false,
10841082useIndicator: true,
@@ -1132,12 +1130,10 @@ describe("config strict validation", () => {
11321130const snap = await readConfigFileSnapshot();
1133113111341132expect(snap.valid).toBe(false);
1135-expect(issuePaths(snap.issues)).toEqual(
1136-expect.arrayContaining(["agents.defaults.sandbox", "agents.list.0.sandbox"]),
1137-);
1138-expect(issuePaths(snap.legacyIssues)).toEqual(
1139-expect.arrayContaining(["agents.defaults.sandbox", "agents.list"]),
1140-);
1133+expect(issuePaths(snap.issues)).toContain("agents.defaults.sandbox");
1134+expect(issuePaths(snap.issues)).toContain("agents.list.0.sandbox");
1135+expect(issuePaths(snap.legacyIssues)).toContain("agents.defaults.sandbox");
1136+expect(issuePaths(snap.legacyIssues)).toContain("agents.list");
11411137expect(snap.sourceConfig.agents?.defaults?.sandbox).toEqual({ perSession: true });
11421138expect(snap.sourceConfig.agents?.list?.[0]?.sandbox).toEqual({ perSession: false });
11431139});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。