70 lines
2.2 KiB
Markdown
70 lines
2.2 KiB
Markdown
# Node's Own Test Runner for the JavaScript of the Page
|
|
|
|
**Status:**
|
|
- proposed: 2026-10-14
|
|
- accepted: 2026-10-14
|
|
- rejected: -
|
|
- superseded: -
|
|
|
|
**Decision [accepted]:** The build tests the JavaScript of the page with `node --test`, without npm packages:
|
|
the smallest new technology that tests the logic of the page.
|
|
|
|
## Context and Problem Statement
|
|
|
|
`dashboard/src/main/resources/static/index.html` holds all JavaScript of the page; no automated test checks it.
|
|
werkrevisor named the gap in werkregie PR#78, on the counting of the merges by day, week and month.
|
|
A test framework for JavaScript is a new technology in werkregie and needs the consent of the human.
|
|
|
|
### Technical Background
|
|
|
|
- The page is plain JavaScript in classic scripts, served by the dashboard; there is no bundler and no `package.json`.
|
|
- In the Werk family, werkbaum tests its frontend with Vitest and jsdom; Werkator builds it with `npm ci`,
|
|
so its build host has Node.
|
|
- Node has a test runner and assertions of its own since Node 18 (`node:test`, `node:assert`).
|
|
- The licence allowlist of the required checks does not hold UPL-1.0, the licence of GraalJS.
|
|
|
|
## Considered Options
|
|
|
|
* `node --test` without npm
|
|
* Vitest and jsdom, as werkbaum
|
|
* GraalJS in the Kotest tests
|
|
|
|
### `node --test` without npm
|
|
|
|
A Gradle task runs `node --test` on test files next to the Kotlin tests; the tested functions move into a script of their own.
|
|
|
|
#### Advantages
|
|
|
|
- No package, so no lock file, no `npm audit` and no licence check for npm.
|
|
- Node exists on Werkator's build host already.
|
|
|
|
#### Disadvantages
|
|
|
|
- Only functions without the DOM are testable.
|
|
- Each machine that runs `./gradlew build` needs Node.
|
|
|
|
### Vitest and jsdom, as werkbaum
|
|
|
|
#### Advantages
|
|
|
|
- Tests of the rendered HTML too; the same tools as werkbaum.
|
|
|
|
#### Disadvantages
|
|
|
|
- npm packages: a lock file, and the npm checks of vulnerabilities and licences become binding.
|
|
|
|
### GraalJS in the Kotest tests
|
|
|
|
#### Advantages
|
|
|
|
- The build stays a JVM build.
|
|
|
|
#### Disadvantages
|
|
|
|
- A large dependency under UPL-1.0, outside the licence allowlist.
|
|
|
|
## Decision Outcome
|
|
|
|
`mi` chose `node --test` without npm on 2026-10-14.
|
|
A move to Vitest and jsdom stays open for when the rendered HTML needs tests.
|