0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

test-assert-lite 同じテストスクリプトをブラウザでも動かす

0
Posted at

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 では標準のものを使い続けてよいかと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?