… functionality
This is meant to simplify checking correctness of code like squidfunk#7227 and fixing bugs like squidfunk#7226. In fact, I'm hoping to eventually make this code general enough that it runs locally with `mike serve`.
I picked `mocha` as the testing library because its Typescript support
relies on ts-node, which this project already relies on. I have little experience with `mocha` vs `jest` vs something else beyond this commit.
See also https://github.com/mochajs/mocha-examples/tree/main/packages/typescript
Instead of using `chai`, I'm using Node's assert package.
Its TS types are in `@types/node`. It should be trivial, and might be good, to switch to `chai` or something else.
This setup is not perfect, in particular I can't get tests to import the whole `index.ts` file. This is why the function being tested gets its own file. Importing `index.ts` would seem to require writing some DOM shims and be a general headache.
For the record, using `tsx` and `jsdom-global` instead of `ts-node` to run `mocha` seemed like the most promising approach, but it still failed since some files imported from this `index.ts` rely on the DOM having some particular structure in their top-level definitions.
Here's how to set up `tsx` and `jsdom-global`, for reference:
```diff
diff --git a/.mocharc.json b/.mocharc.json
index e713305556...33c9adc84d 100644
--- a/.mocharc.json
+++ b/.mocharc.json
@@ -2,5 +2,5 @@
"$schema": "https://json.schemastore.org/mocharc.json",
"extension": ["ts"],
"spec": "src/**/**.test.ts",
- "require": "ts-node/register"
+ "require": ["tsx", "jsdom-global/register"]
}
diff --git a/package.json b/package.json
index ecc9f98cf9...10242ca725 100644
--- a/package.json
+++ b/package.json
@@ -76,6 +76,7 @@
"gitlab": "^14.2.2",
"google-fonts-complete": "jonathantneal/google-fonts-complete",
"html-minifier": "^4.0.0",
+ "jsdom-global": "^3.0.2",
"material-design-color": "^2.3.2",
"material-shadows": "^3.0.1",
"mocha": "^10.6.0",
@@ -99,6 +100,7 @@
"svgo": "3.0.0",
"tiny-glob": "^0.2.9",
"ts-node": "^10.9.2",
+ "tsx": "^4.16.2",
"typescript": "^5.5.2"
},
"engines": {
```
I can also incorporate the diff into this commit.