diff --git a/change/change-0203adf5-77c4-48b6-ba17-2d2094747b21.json b/change/change-0203adf5-77c4-48b6-ba17-2d2094747b21.json new file mode 100644 index 000000000..26db1a0d2 --- /dev/null +++ b/change/change-0203adf5-77c4-48b6-ba17-2d2094747b21.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "type": "none", + "comment": "Fix issue with tests failing during cleanup", + "packageName": "@lage-run/reporters", + "email": "dobes@formative.com", + "dependentChangeType": "none" + } + ] +} \ No newline at end of file diff --git a/packages/cli/tests/initializeReporters.test.ts b/packages/cli/tests/initializeReporters.test.ts index 4fa3c19c3..8a225ae70 100644 --- a/packages/cli/tests/initializeReporters.test.ts +++ b/packages/cli/tests/initializeReporters.test.ts @@ -1,24 +1,30 @@ import fs from "fs"; import path from "path"; import os from "os"; -import { Logger } from "@lage-run/logger"; +import { Logger, LogStructuredData, Reporter } from "@lage-run/logger"; import { AdoReporter, ChromeTraceEventsReporter, LogReporter, ProgressReporter } from "@lage-run/reporters"; import { initializeReporters } from "../src/commands/initializeReporters.js"; describe("initializeReporters", () => { let tmpDir: string; + let reporters: Reporter[] | undefined; + + afterEach(() => { + reporters.forEach((r) => r.cleanup?.()); + reporters = undefined; + }); beforeAll(() => { tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "lage-")); }); afterAll(() => { - fs.rmdirSync(tmpDir, { recursive: true }); + fs.rmSync(tmpDir, { force: true, recursive: true }); }); it("should initialize progress reporter when param is progress passed as true", () => { const logger = new Logger(); - const reporters = initializeReporters(logger, { + reporters = initializeReporters(logger, { concurrency: 1, grouped: false, logLevel: "info", @@ -33,7 +39,7 @@ describe("initializeReporters", () => { it("should initialize old reporter when grouped", () => { const logger = new Logger(); - const reporters = initializeReporters(logger, { + reporters = initializeReporters(logger, { concurrency: 1, grouped: true, logLevel: "info", @@ -47,7 +53,7 @@ describe("initializeReporters", () => { it("should initialize old reporter when verbose", () => { const logger = new Logger(); - const reporters = initializeReporters(logger, { + reporters = initializeReporters(logger, { concurrency: 1, grouped: false, logLevel: "info", @@ -61,7 +67,7 @@ describe("initializeReporters", () => { it("should initialize profile reporter", () => { const logger = new Logger(); - const reporters = initializeReporters(logger, { + reporters = initializeReporters(logger, { concurrency: 1, grouped: false, logLevel: "info", @@ -77,7 +83,7 @@ describe("initializeReporters", () => { it("should initialize ADO reporter when reporter arg is adoLog", () => { const logger = new Logger(); - const reporters = initializeReporters(logger, { + reporters = initializeReporters(logger, { concurrency: 1, grouped: false, logLevel: "info", diff --git a/packages/reporters/src/ChromeTraceEventsReporter.ts b/packages/reporters/src/ChromeTraceEventsReporter.ts index d75d42b5b..e05ed648d 100644 --- a/packages/reporters/src/ChromeTraceEventsReporter.ts +++ b/packages/reporters/src/ChromeTraceEventsReporter.ts @@ -1,5 +1,5 @@ import chalk from "chalk"; -import fs from "fs"; +import fs, { type WriteStream } from "fs"; import path from "path"; import type { Reporter } from "@lage-run/logger"; import type { SchedulerRunSummary, TargetRun } from "@lage-run/scheduler-types"; @@ -39,7 +39,7 @@ function getTimeBasedFilename(prefix: string) { } export class ChromeTraceEventsReporter implements Reporter { - logStream: Writable; + logStream: Writable | WriteStream; consoleLogStream: Writable = process.stdout; private events: TraceEventsObject = { @@ -101,4 +101,13 @@ export class ChromeTraceEventsReporter implements Reporter { ) ); } + + cleanup() { + if ("close" in this.logStream) { + this.logStream.on("error", (err: any) => { + this.consoleLogStream.write(chalk.blueBright(`\nError closing ${chalk.underline(this.outputFile)}: ${err}\n`)); + }); + this.logStream.close(); + } + } }