Jestとは?JavaScriptテストフレームワークを解説
Jestは、テストランナー、アサーション、モック、スナップショットテストを内蔵した、オールインワンのJavaScriptテストフレームワークです。
Jestは、プロジェクトに必要なものすべてを1つのツールにまとめることで、標準的なJavaScriptテストフレームワークになりました。ランナー、アサーションライブラリ、モック、カバレッジ、スナップショットテストを、ほとんど設定なしで提供します。特にReactやNode.jsのプロジェクトでよく使われています。
Jestとは
Jestは、テストランナー、多数のmatcherを備えた "expect" アサーションAPI、モックシステム、コードカバレッジ、スナップショットテストを含むテストフレームワークです。分離された環境でテストを実行し、速度のために複数のワーカープロセスにまたがって並列に実行できます。
matcher、mock、snapshot
アサーションは "expect(value).toBe(expected)" のように読め、等価性、型、エラーなどのためのmatcherがあります。Jestはモジュールを自動モックすることも、モックの実装を自分で定義させることもできます。スナップショットテストはシリアライズされた出力を記録し、それが変化したときに知らせてくれます。これはUIコンポーネントに便利ですが、不正な変更を機械的に承認してしまわないよう注意が必要です。
テスト例
テストはdescribeとitでアサーションをグループ化します。
test("adds numbers", () => {
expect(1 + 2).toBe(3);
});
test("mock is called", () => {
const fn = jest.fn();
fn("x");
expect(fn).toHaveBeenCalledWith("x");
});CI/CDにおける役割
CIでは、Jestは単体テストと結合テストのスイートを実行し、失敗時には非ゼロで終了してjobを失敗させます。"jest --ci" は自動化向けに挙動を調整します (例えば、新しいスナップショットを書き込む代わりに失敗させます)。大きなスイートはよくあるボトルネックです。Jestはワーカーにまたがって並列化しますし、テストをjob間でシャーディングしたり、より高速なマネージドランナーで実行したりすることでフィードバック時間を短縮できます。
代替手段
VitestはVite製のより高速なフレームワークで、Jest互換のAPIを備えています。MochaとChaiの組み合わせは柔軟でモジュラーな代替手段です。Node組み込みのテストランナーは軽量な選択肢です。Jestはオールインワンの設計と成熟したReactのツール群により、依然として人気があります。
重要なポイント
- Jestはランナー、アサーション、モック、カバレッジ、スナップショットをまとめて提供します。
- テストを並列に実行し、CIでは失敗時に非ゼロで終了します。
- "jest --ci" を使い、大きなスイートをシャーディングしてパイプラインを高速に保ちましょう。