@@ -94,6 +94,27 @@ describe("scripts/profile-extension-memory", () => {
|
94 | 94 | } |
95 | 95 | }); |
96 | 96 | |
| 97 | +it("creates parent directories for nested JSON report paths", () => { |
| 98 | +const root = mkdtempSync(path.join(tmpdir(), "openclaw-extension-memory-test-")); |
| 99 | +try { |
| 100 | +const extensionDir = path.join(root, "dist", "extensions", "simple"); |
| 101 | +const reportPath = path.join(root, ".artifacts", "memory", "report.json"); |
| 102 | +mkdirSync(extensionDir, { recursive: true }); |
| 103 | +writeFileSync(path.join(extensionDir, "index.js"), `export default {};\n`, "utf8"); |
| 104 | + |
| 105 | +const result = runProfileExtensionMemory( |
| 106 | +["--extension", "simple", "--skip-combined", "--concurrency", "1", "--json", reportPath], |
| 107 | +root, |
| 108 | +); |
| 109 | + |
| 110 | +expect(result.status, result.stderr).toBe(0); |
| 111 | +const report = JSON.parse(readFileSync(reportPath, "utf8")); |
| 112 | +expect(report.counts).toMatchObject({ totalEntries: 1, ok: 1, fail: 0, timeout: 0 }); |
| 113 | +} finally { |
| 114 | +rmSync(root, { recursive: true, force: true }); |
| 115 | +} |
| 116 | +}); |
| 117 | + |
97 | 118 | it("fails when a profiled plugin import fails", () => { |
98 | 119 | const root = mkdtempSync(path.join(tmpdir(), "openclaw-extension-memory-test-")); |
99 | 120 | try { |
|