
























@@ -28,36 +28,37 @@ async function makeTempRepo(prefix: string) {
2828return repoRoot;
2929}
303031-async function writeEvidence(pathLocal: string) {
32-await fs.mkdir(path.dirname(pathLocal), { recursive: true });
33-await fs.writeFile(
34-pathLocal,
35-`${JSON.stringify(
36- {
37- kind: "openclaw.qa.evidence-summary",
38- schemaVersion: 2,
39- generatedAt: "2026-06-14T00:00:00.000Z",
40- evidenceMode: "full",
41- entries: [],
42- },
43- null,
44- 2,
45- )}\n`,
46-"utf8",
47-);
31+async function writeEvidence(pathLocal: string, writeFile = true) {
32+const evidence = {
33+kind: "openclaw.qa.evidence-summary",
34+schemaVersion: 2,
35+generatedAt: "2026-06-14T00:00:00.000Z",
36+evidenceMode: "full",
37+entries: [],
38+};
39+if (writeFile) {
40+await fs.mkdir(path.dirname(pathLocal), { recursive: true });
41+await fs.writeFile(pathLocal, `${JSON.stringify(evidence, null, 2)}\n`, "utf8");
42+}
43+return evidence;
4844}
49455046describe("qa suite runtime launcher", () => {
5147beforeEach(() => {
5248runQaFlowSuite.mockReset();
5349runQaTestFileScenarios.mockReset();
5450runQaFlowSuite.mockImplementation(
55-async (params: { outputDir?: string; scenarioIds?: string[] } | undefined) => {
51+async (
52+params:
53+| { outputDir?: string; scenarioIds?: string[]; writeEvidenceFile?: boolean }
54+| undefined,
55+) => {
5656const outputDir = params?.outputDir ?? "/tmp/qa-flow";
5757const evidencePath = path.join(outputDir, "qa-evidence.json");
58-await writeEvidence(evidencePath);
58+const evidence = await writeEvidence(evidencePath, params?.writeEvidenceFile);
5959const scenarioIds = params?.scenarioIds ?? ["channel-chat-baseline"];
6060return {
61+ evidence,
6162 outputDir,
6263 evidencePath,
6364reportPath: path.join(outputDir, "qa-suite-report.md"),
@@ -76,14 +77,16 @@ describe("qa suite runtime launcher", () => {
7677async (params: {
7778outputDir: string;
7879scenarios: Array<{ id: string; execution: { kind: "script" | "vitest" | "playwright" } }>;
80+writeEvidenceFile?: boolean;
7981}) => {
8082const [scenario] = params.scenarios;
8183if (!scenario) {
8284throw new Error("expected scenario");
8385}
8486const evidencePath = path.join(params.outputDir, "qa-evidence.json");
85-await writeEvidence(evidencePath);
87+const evidence = await writeEvidence(evidencePath, params.writeEvidenceFile);
8688return {
89+ evidence,
8790outputDir: params.outputDir,
8891executionKind: scenario.execution.kind,
8992 evidencePath,
@@ -247,15 +250,27 @@ describe("qa suite runtime launcher", () => {
247250expect.objectContaining({
248251outputDir: path.join(outputDir, "flow"),
249252scenarioIds: ["channel-chat-baseline"],
253+writeEvidenceFile: false,
250254}),
251255);
252256expect(runQaTestFileScenarios).toHaveBeenCalledWith(
253257expect.objectContaining({
254258outputDir: path.join(outputDir, "playwright"),
259+writeEvidenceFile: false,
255260}),
256261);
257262await expect(fs.access(path.join(outputDir, "qa-suite-summary.json"))).resolves.toBeUndefined();
258263await expect(fs.access(path.join(outputDir, "qa-evidence.json"))).resolves.toBeUndefined();
264+await expect(fs.access(path.join(outputDir, "flow", "qa-evidence.json"))).rejects.toMatchObject(
265+{
266+code: "ENOENT",
267+},
268+);
269+await expect(
270+fs.access(path.join(outputDir, "playwright", "qa-evidence.json")),
271+).rejects.toMatchObject({
272+code: "ENOENT",
273+});
259274const summary = JSON.parse(
260275await fs.readFile(path.join(outputDir, "qa-suite-summary.json"), "utf8"),
261276) as {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。