singularity-forge/scripts/test-reporter-compact.mjs
2026-05-05 14:31:16 +02:00

48 lines
1.1 KiB
JavaScript

/**
* Compact test reporter: silent on pass, prints failures + final summary.
* Usage: --test-reporter=./scripts/test-reporter-compact.mjs
*/
import { Transform } from "node:stream";
export default class CompactReporter extends Transform {
#pass = 0;
#fail = 0;
#skip = 0;
#failures = [];
constructor() {
super({ objectMode: true });
}
_transform(event, _enc, cb) {
switch (event.type) {
case "test:pass":
if (!event.data.skip) this.#pass++;
else this.#skip++;
break;
case "test:fail": {
this.#fail++;
const { name, details } = event.data;
const err = details?.error;
const msg = err?.message ?? String(err ?? "unknown");
const loc = err?.cause?.stack?.split("\n")[1]?.trim() ?? "";
this.#failures.push(
`${name}\n ${msg}${loc ? `\n ${loc}` : ""}`,
);
break;
}
}
cb();
}
_flush(cb) {
if (this.#failures.length) {
this.push(`\n✖ failing tests:\n${this.#failures.join("\n\n")}\n`);
}
const status = this.#fail === 0 ? "✔" : "✖";
this.push(
`\n${status} ${this.#pass} passed, ${this.#fail} failed, ${this.#skip} skipped\n`,
);
cb();
}
}