mirror of
https://github.com/penpot/penpot.git
synced 2026-05-23 08:53:39 +00:00
✨ Add quiet variant of frontend test command
Introduces `pnpm run test:quiet` for non-interactive runs (CI, scripted invocations, agent loops). It runs the same pipeline as `pnpm run test` — `build:wasm`, then `build:test`, then `node target/tests/test.js` — but buffers each build step's stdout and stderr and only replays them when that step exits non-zero. Test-runner output streams through unchanged, so failures and the summary are never hidden. Short progress hints (`Building wasm...`, `Building test bundle...`, `Running tests...`) are written to stderr, leaving stdout to carry only the test results for clean capture and parsing. Forwards arguments verbatim, so `pnpm run test:quiet -- --focus ...` composes with the existing `--focus` flag. The default `pnpm run test` script and its output are unchanged. Also documents the new command in the developer guide and updates the frontend testing memory to recommend it for agent runs.
This commit is contained in:
parent
17041b53a7
commit
c29f32c7ae
@ -7,9 +7,9 @@ Frontend validation: CLJS + React/Rumext + RxJS/Potok; SCSS modules; shared CLJC
|
||||
Frontend unit tests live under `frontend/test/frontend_tests/` and use `cljs.test`. They should be deterministic, avoid DOM/UI integration where possible, and mock side effects such as RPC, storage, timers, or network access.
|
||||
|
||||
From `frontend/`:
|
||||
- Full unit test run: `pnpm run test`.
|
||||
- Focus a frontend CLJS test namespace: `pnpm run test -- --focus frontend-tests.logic.components-and-tokens`.
|
||||
- Focus one frontend CLJS test var: `pnpm run test -- --focus frontend-tests.logic.components-and-tokens/change-spacing-token-in-main-updates-copy-layout`.
|
||||
- Full unit test run: `pnpm run test:quiet`.
|
||||
- Focus a frontend CLJS test namespace: `pnpm run test:quiet -- --focus frontend-tests.logic.components-and-tokens`.
|
||||
- Focus one frontend CLJS test var: `pnpm run test:quiet -- --focus frontend-tests.logic.components-and-tokens/change-spacing-token-in-main-updates-copy-layout`.
|
||||
- Build test target only: `pnpm run build:test`.
|
||||
- After `pnpm run build:test`, direct compiled runner focus is faster: `node target/tests/test.js --focus frontend-tests.logic.components-and-tokens/change-spacing-token-in-main-updates-copy-layout`.
|
||||
- Watch tests: `pnpm run watch:test`.
|
||||
|
||||
@ -294,6 +294,18 @@ pnpm run test -- --focus frontend-tests.logic.components-and-tokens
|
||||
pnpm run test -- --focus frontend-tests.logic.components-and-tokens/change-token-in-main
|
||||
```
|
||||
|
||||
For non-interactive runs (CI, scripted invocations, agent loops), use the quiet
|
||||
variant. It runs the same `build:wasm && build:test && node target/tests/test.js`
|
||||
pipeline but buffers each build step's output and only replays it on failure;
|
||||
test-runner output streams through normally. Short progress hints
|
||||
(`Building wasm...`, `Running tests...`) go to `stderr`, so capturing `stdout`
|
||||
gives you just the test results.
|
||||
|
||||
```bash
|
||||
# Quiet run (same arguments as `pnpm run test`)
|
||||
pnpm run test:quiet -- --focus frontend-tests.logic.components-and-tokens
|
||||
```
|
||||
|
||||
#### Test output
|
||||
|
||||
The default kaocha reporter outputs a summary for the test run. There is a pair
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
"lint:scss": "pnpm exec stylelint '{src,resources}/**/*.scss'",
|
||||
"build:test": "clojure -M:dev:shadow-cljs compile test",
|
||||
"test": "pnpm run build:wasm && pnpm run build:test && node target/tests/test.js",
|
||||
"test:quiet": "node ./scripts/test-quiet.js",
|
||||
"test:storybook": "vitest run --project=storybook",
|
||||
"watch:test": "mkdir -p target/tests && concurrently \"clojure -M:dev:shadow-cljs watch test\" \"nodemon -C -d 2 -w target/tests --exec 'node target/tests/test.js'\"",
|
||||
"test:e2e": "playwright test --project default",
|
||||
|
||||
30
frontend/scripts/test-quiet.js
Normal file
30
frontend/scripts/test-quiet.js
Normal file
@ -0,0 +1,30 @@
|
||||
import { spawnSync } from "node:child_process";
|
||||
|
||||
const BUILD_STEPS = [
|
||||
{ label: "Building wasm", cmd: "pnpm", args: ["run", "build:wasm"] },
|
||||
{ label: "Building test bundle", cmd: "pnpm", args: ["run", "build:test"] },
|
||||
];
|
||||
|
||||
const progress = (msg) => process.stderr.write(`${msg}\n`);
|
||||
|
||||
for (const step of BUILD_STEPS) {
|
||||
progress(`${step.label}...`);
|
||||
const result = spawnSync(step.cmd, step.args, {
|
||||
stdio: ["ignore", "pipe", "pipe"],
|
||||
maxBuffer: 64 * 1024 * 1024,
|
||||
});
|
||||
if (result.status !== 0) {
|
||||
progress(`${step.label} failed`);
|
||||
if (result.stdout?.length) process.stdout.write(result.stdout);
|
||||
if (result.stderr?.length) process.stderr.write(result.stderr);
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
}
|
||||
|
||||
progress("Running tests...");
|
||||
const result = spawnSync(
|
||||
"node",
|
||||
["target/tests/test.js", ...process.argv.slice(2)],
|
||||
{ stdio: "inherit" },
|
||||
);
|
||||
process.exit(result.status ?? 1);
|
||||
Loading…
x
Reference in New Issue
Block a user