Node 18 から実験的に導入された組み込みのテストランナーがありますが、これが 21 で対象を glob 指定できるようになりました。
- https://nodejs.org/en/blog/announcements/v18-release-announce#test-runner-module-experimental
- https://nodejs.org/en/blog/announcements/v21-release-announce#support-for-globs-in-the-nodejs-test-runner
swc-node と組み合わせると、それなりに使えそうなテストランナーになりそうです。
これらを用意した状態で次のコマンドにすると、 TS をトランスパイルしつつ watch モードで動くテストランナーが作れます。
$ node --import @swc-node/register/esm-register --watch --test 'src/**/*.test.ts'
Note
webpack などのバンドラーを使って ESM で記述している場合、Node の ESM と共存できるようにする必要があります。
自分は import を *.js
で行うようにし、 extentionAlias
で import xxx from './xxx.js'
を .ts
としても解決できるようにしました。
https://webpack.js.org/configuration/resolve/#resolveextensionalias