Node.js には標準で node:test および node:assert モジュールがついてきて、追加の外部モジュールなくテストが書けます。そのテストで使う同じ describe/it/suite/test 系のメソッドや、equal/deepStrictEqual 等の assert 系メソッドをウェブブラウザでも使えるように、ライブラリ test-assert-lite を公開しました。
サードパーティの assert モジュール すなわち commonjs-assert は、Node v12 の頃の移植でした。標準ではブラウザ向けのビルドは提供されておらず、ブラウザでもテストしたい場合は、自前の Rollup などでビルドする手順です。また、mocha のようなテストランナーが別途に必要でした。
test-assert-lite は、わずか 32KB の ESM 版のブラウザ向けビルド test-assert-lite.min.js も提供します。外部依存ないスタンドアロンなモジュールなので、自前のビルドも不要となり、手間がありません。テストランナーの機能も含みます。
node_modules の容量を確認しても、従来の assert・mocha と比べて、test-assert-lite はコンパクトですから、気軽に導入できます。
| 標準モジュール | 容量 | 外部モジュール | 容量 | 切り替え後 | 容量 |
|---|---|---|---|---|---|
| node:assert | 0 MB | assert | 2.4 MB | test-assert-lite | 0.2 MB |
| node:test | 0 MB | mocha | 12.5 MB | 〃 | (↑に含む) |
test-assert-lite の使い方は、node:test および node:assert と同じです。import 行だけ書き換えれば、既存のテストスクリプト本体が基本的にそのまま動きます。
// import {strict as assert} from "node:assert"
import {strict as assert} from "test-assert-lite/assert"
// import {describe, it} from "node:test"
import {describe, it} from "test-assert-lite/test"
describe("buildQuery() from an object", () => {
it("round-trips through parseQuery()", () => {
const params = {q: "cat", page: "2"}
assert.deepEqual(parseQuery("?" + buildQuery(params)), params)
})
})
モジュール名の書き換えは、rollup の alias プラグイン を使えば自動化できますから、同じテストスクリプトを Node.js とブラウザ向けでそのまま共有することができます。
実際のところ、Node.js でも標準 node:assert を使わずに、test-assert-lite/assert に乗り換えてテスト実行することも可能ですが、そのメリットはとくにありませんから、Node.js では標準のものを使い続けてよいかと思います。