Vitestとは?Vite製のテストフレームワーク
VitestはVite上に構築された高速な単体テストフレームワークで、既存のVite設定を再利用し、watchモードでの即座のフィードバックとJest互換のAPIを提供します。
VitestはViteの速さをテストにもたらしました。プロジェクトのVite設定とトランスフォームのパイプラインを共有するため、テストはアプリと同じセットアップで実行され、そのAPIはJestに十分近く、通常は移行も苦になりません。
Vitestとは
Vitestは、Viteを動力とする単体テストおよび結合テストのフレームワークです。テストランナー、Jest互換の "expect" API、モック、カバレッジ、スナップショットテストを提供します。Viteのトランスフォームのパイプライン (esbuild) を使うため、追加の設定なしでTypeScript、JSX、ESMを扱えます。
仕組み
Vitestはvite.configを再利用するため、テストはアプリケーションとまったく同じようにモジュールを解決し、トランスフォームを適用します。watchモードは、Viteのモジュールグラフを活用して変更の影響を受けたテストだけを再実行するため高速です。Jest互換のAPIにより、describe、it、expect、そしてほとんどのmatcherが開発者の期待どおりに動作します。
テスト例
この構文はJestを使ったことのある人には馴染みのあるものです。
import { expect, test } from "vitest";
test("adds numbers", () => {
expect(1 + 2).toBe(3);
});CI/CDにおける役割
CIでは、"vitest run" がスイートを一度だけ実行し (watchなし)、失敗時に非ゼロで終了します。esbuildベースのトランスフォームにより起動と実行が高速になり、テストのステップを短縮します。カバレッジはフラグで有効化でき、テストはjob間でシャーディングできます。より高速なマネージドランナーに加え、一時的なflakyさへの自動リトライにより、大きなスイートを高速かつ安定に保ちます。
代替手段
Jestは最大のエコシステムを持つ確立されたフレームワークで、VitestとAPI互換です。MochaとChaiの組み合わせはモジュラーな代替手段です。Vitestは、Viteベースのプロジェクトや、テストの速度と共有された設定が重要な場面で自然な選択肢となります。
重要なポイント
- VitestはJest互換のAPIを備えた、高速なVite製のテストフレームワークです。
- Vite設定を再利用するため、テストはアプリとまったく同じようにトランスフォームされます。
- CIでは "vitest run" を使いましょう。失敗時に非ゼロで終了し、高速に動作します。