mizdra's blog

ぽよぐらみんぐ

node --test と Vitest どちらを使うべきか

社内で「node --test って実際どうなの?」という議論がありました。その参考に、id:mizdranode --test 最近を触って思ったことや、感想などを書いてみます。

結論だけ先に書いておくと、node --test はミニマムなテスティングフレームワークです。テストする時に必要とされる機能は大体ありますが、Vitest と比較すると色々欠けてます。そして、Vitest と比べて何が足りないのか、実際に触ってみるまで意外と分からないです。とりあえず動けば OK という人は、Vitest 使ったら良いと思います。node --test はミニマリスト向けです。

node --test とは

まず node --test って何という人のために書いておくと、Node.js 組み込みのテストランナーのことです。Node.js v16.17.0, v18.0.0 から導入されてます。

基本的な使い方は、以下の記事を見るとわかりやすいです。

一応ざっと要点を書いておくと、

  • node --test "src/**/*.js" でテスト実行
  • node:test モジュールからテストのための utility が export されてる
    • describe, test, mock
    • Jest, Vitest とだいたい互換性のあるインターフェイス
  • assertion だけは node:assert から export されてる
    • node:assertnode:test より前からあった上に、テスト以外でも assertion が利用可能なので、別のモジュールになってる
    • インターフェイスも Jest, Vitest (BDD style) とは違う
  • TypeScript でテストを書くには --experimental-strip-types が必要 *1
    • node --test --experimental-strip-types "src/**/*.ts"
  • スナップショットテスト もできる
  • テストファイル更新時に rerun するには node --test --watch

id:mizdra は以下のリポジトリで使ってみています。

使ってみた感想

素朴だけど、それでも間に合うなら大丈夫という感じ。ミニマリストにはオススメです。

*1:ちなみにフラグなしでも TypeScript が利用できるような計画が進んでる: https://github.com/nodejs/typescript/issues/17

*2:最近安定化の PR がマージされたので、そのうち --test-snapshots でいけるようになるはず: https://github.com/nodejs/node/pull/55897

ポケットモンスター・ポケモン・Pokémon・は任天堂・クリーチャーズ・ゲームフリークの登録商標です.

当ブログは @mizdra 個人により運営されており, 株式会社ポケモン及びその関連会社とは一切関係ありません.