Javascript

JavaScriptテスト自動化入門:Jestで始める実務ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1. Jest の概要と導入メリット

Jest は Facebook が開発した、設定不要(ゼロコンフィグ)で動作する JavaScript テストランナーです。Babel・TypeScript の変換を自動的に行い、スナップショットテストやモック機能が標準装備されているため、フロントエンドだけでなく Node.js アプリケーションでもシームレスに採用できます。

特徴 具体的な効果
ゼロコンフィグ npm test だけでテストが走り、設定ファイル不要(ただしプロジェクト固有の要件がある場合はオプションで拡張)【1】
スナップショットテスト UI コンポーネントの出力を保存・比較でき、リグレッション防止に有効
内蔵モック API (jest.mock) 外部依存やファイルシステムを簡単に置き換え、ユニットテストの信頼性が向上【1】

ポイント:Jest が提供する 3 本柱(設定不要・スナップショット・モック)により、チーム全体でテスト文化を早期に浸透させやすくなります。


2. プロジェクトへのインストールと基本設定

2‑1. 共通インストール手順(Node.js)

package.json にテストスクリプトを追加すれば、npm test だけで Jest が起動します。

2‑2. 最小構成の jest.config.js

Node 環境のみで実行する場合は、次のようにシンプルに記述できます。

2‑3. フロントエンド(React / Vue)向けの拡張設定

React プロジェクト

babel.config.js

jest.config.js

Vue プロジェクト

jest.config.js

補足identity-obj-proxy は CSS モジュールのモックに特化したパッケージです。インストールし忘れると moduleNameMapper が解決できずテストが失敗します。


3. テストコードの基本構造

3‑1. テストスイートとケース (describe / test)

  • describe がテスト対象(モジュール・コンポーネント)ごとの スイート を表し、失敗時に階層化されたレポートが出力されます。
  • testit は同義で、個別の テストケース を定義します。

3‑2. アサーションとカスタムマッチャー

組み込みマッチャー例

カスタムマッチャーの作り方

src/__tests__/matchers.js

jest.setup.js(Jest のセットアップファイルに記載)

テスト側

ベストプラクティス:カスタムマッチャーはプロジェクト共通の検証ロジックを一元化し、テストコードの可読性と保守性を高めます。


4. モック機能の実践

4‑1. jest.mock の基本

4‑2. 手動モック (__mocks__ ディレクトリ)

手動モック実装例(src/__mocks__/utils.js

テスト側

注意点まとめ

項目 推奨対策
モジュールキャッシュの汚染 jest.resetModules() または個別テストで mockClear() を実行
スコープ漏れ 必要に応じて jest.isolateModules(() => { … }) で分離
手動モックと自動モックの併用 同一ファイルを同時に jest.mock と manual mock しない

5. 非同期テストの書き方

5‑1. async/await を使うパターン(推奨)

  • テスト関数が async の場合、Jest が自動で Promise 完了 を待ちます。done コールバックは不要です。

5‑2. Promise 直接返却と旧来の done

方法 メリット デメリット
return promise 簡潔、エラーが自動で失敗扱い 非同期ロジックが長くなると見通しが悪くなる
async/await (推奨) 直感的なフロー、try/catch で例外処理が可能 -
done コールバック 必要なケース(例: コールバックベースの API)に限定 途中例外で done が呼ばれずテストがタイムアウトしやすい

例:Promise 返却

例:done(非推奨)

ベストプラクティス
- 基本は async/await または Promise 返却 を選択。
- done はレガシーコードのリファクタリング対象とする。
- 長時間実行テストは jest.setTimeout(30000) 等でタイムアウトを明示的に拡張。


6. テスト自動化・運用ガイド

6‑1. カバレッジ取得とレポート設定

実行コマンド

6‑2. CI(GitHub Actions)への組み込み

.github/workflows/ci.yml

  • --ci オプションは CI 環境での最適化(シリアル実行・キャッシュ削減)を有効にします。
  • テスト結果とカバレッジサマリが Pull Request のステータスチェックとして表示されます。

6‑3. ディレクトリ構成・命名規則

  • テストファイル名*.test.js または *.spec.js を統一。
  • モック__mocks__/ 配下に置くと自動的に適用される。

VSCode で Jest デバッグ

6‑4. よくあるエラーと対処法

エラーメッセージ 主な原因 解決策
Cannot find module Babel が対象拡張子を変換できていない、または moduleNameMapper が不足 transform に正規表現を追加、もしくはマッピング設定を見直す
Exceeded timeout of 5000 ms 非同期処理が完了しない、done 未呼び出し async/await に書き換えるか jest.setTimeout(10000) 等で延長
モックが適用されない jest.mock がインポートより後に記述されている テストファイルの先頭(インポート直前)に配置、または jest.isolateModules を使用
カバレッジが 0% collectCoverageFrom の除外パターンが過剰 必要なソースだけを列挙し、除外は最小限に抑える

7. 参考文献

  1. Jest公式ドキュメント – Getting Started
    https://jestjs.io/docs/getting-started(2024 年版)

  2. Jest Configuration – Advanced Options
    https://jestjs.io/docs/configuration(2024 年版)

  3. identity-obj-proxy – npm package
    https://www.npmjs.com/package/identity-obj-proxy


次のステップ

  1. 本ガイドの手順で npm test が成功することを確認。
  2. プロジェクトに CI(GitHub Actions)とカバレッジ設定を追加し、プルリクエストごとに自動テストが走る環境を構築。
  3. 必要に応じてカスタムマッチャーや手動モックを導入し、テストの表現力を高めましょう。

以上で Jest を使ったテスト基盤構築 の基本は完了です。実務で活用しながら、チームに最適なテストフローを磨いてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-Javascript