Skip to content
Latchkey

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でアサーションをグループ化します。

A minimal Jest test
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" を使い、大きなスイートをシャーディングしてパイプラインを高速に保ちましょう。

関連ガイド