Vitest を選ぶ理由
NOTE
このガイドは、Vite に精通していることを前提としています。Vite について学ぶには、Why Vite Guide や、Evan You が主要な概念を説明するデモを行ったストリーム「Next generation frontend tooling with ViteJS」を参照することをお勧めします。
Vite ネイティブなテストランナーが必要な理由
Vite は、一般的な Web パターン、グロブインポートや SSR プリミティブなどの機能、そして豊富なプラグインや統合機能に対する標準サポートにより、活発なエコシステムを形成しています。その開発およびビルド体験が成功の鍵です。ドキュメントサイト向けには、Vite を利用した SSG ベースの代替手段がいくつか存在します。しかし、Vite のユニットテストに関する状況は明確ではありませんでした。Jest のような既存のツールは、異なるコンテキストで作成されたため、Jest と Vite の間には多くの設定の重複があり、ユーザーは 2 つの異なるパイプラインを設定する必要がありました。
テスト中に Vite 開発サーバーを使用してファイルを変換することで、シンプルなテストランナーの作成が可能になります。これにより、ソースファイルの変換の複雑さを処理する必要がなくなり、テスト中の最高の開発者体験 (DX) を提供することに専念できます。これは、アプリケーションと同じ設定 (vite.config.js
を介して) を使用し、開発、ビルド、テスト時に共通の変換パイプラインを共有するテストランナーです。Vite とのファーストクラスの統合を可能にする同じプラグイン API で拡張できます。Vite の改善された DX、例えば即時的なホットモジュールリロード (HMR) を活用し、最初から Vite を念頭に置いて構築されたツールです。これこそが Vitest です。Vite を利用した次世代のテストフレームワークです。
Jest が広く採用されていることを考慮し、Vitest は互換性のある API を提供しており、ほとんどのプロジェクトでドロップインの代替として利用できます。また、ユニットテストを設定する際に必要な最も一般的な機能 (モック、スナップショット、カバレッジ) も含まれています。Vitest はパフォーマンスを非常に重視しており、Worker スレッドを使用して可能な限り並行して実行します。一部のプロジェクトでは、テストの実行が大幅に高速化されています。ウォッチモードはデフォルトで有効になっており、Vite が開発者優先のエクスペリエンスを推進する方法と一致しています。これらの開発者体験の向上にもかかわらず、Vitest は依存関係を慎重に選択する(または必要な部分を直接インライン化する)ことで軽量性を保っています。
Vitest は、Vite プロジェクトのテストランナーとして、また Vite を使用していないプロジェクトにとっても堅実な代替手段となることを目指しています。
はじめに で続きをお読みください。
Vitest は X とどう違うのか?
Vitest が他の類似ツールとどのように異なるかについては、比較 セクションで詳細を確認できます。