Next.jsでJestを設定する
JestとReact Testing Libraryは、単体テストとスナップショットテストでよく一緒に使用されます。このガイドでは、Next.jsでJestをセットアップし、最初のテストを書く方法を説明します。
補足: async
サーバーコンポーネントはReactエコシステムで新しいため、現在Jestはそれをサポートしていません。同期的なサーバーとクライアントコンポーネントの単体テストは可能ですが、async
コンポーネントにはE2Eテストを使用することをお勧めします。
Next.jsのwith-jestサンプルを使用して、create-next-app
で素早く始めることができます:
Next.js 12のリリース以降、Next.jsはJestの組み込み設定を提供しています。
Jestをセットアップするには、次の依存パッケージを開発依存として追加します:
次のコマンドを実行して、基本的なJest設定ファイルを生成します:
これにより、プロジェクトのJestセットアップに関する一連のプロンプトが表示され、自動的にjest.config.ts|js
ファイルが作成されます。
設定ファイルを更新してnext/jest
を使用します。このトランスフォーマーには、Next.jsで動作するJestに必要な設定オプションがすべて含まれています:
内部的に、next/jest
は自動的にJestを設定します。以下が含まれます:
- Next.jsコンパイラを使用した
transform
の設定
- スタイルシート(
.css
、.module.css
、およびscssバリアント)、画像インポート、next/font
の自動モック
.env
(およびその他のバリアント)のprocess.env
への読み込み
- テストの解決とトランスフォームから
node_modules
を無視
- テストの解決から
.next
を無視
- SWCトランスフォームを有効にするフラグの
next.config.js
の読み込み
補足: 環境変数を直接テストするには、別のセットアップスクリプトまたはjest.config.ts
ファイルで手動で読み込みます。詳細については、テスト環境変数を参照してください。
Next.jsコンパイラを無効にしてBabelを使用する場合、babel-jest
とidentity-obj-proxy
を追加でインストールし、Jestを手動で設定する必要があります。
Next.jsのJest設定のおすすめオプションは以下の通りです:
各設定オプションの詳細はJestドキュメントで確認できます。Next.jsがJestをどのように設定しているかは、next/jest
設定も確認することをお勧めします。
スタイルシートと画像はテストでは使用されませんが、インポートするとエラーが発生する可能性があるため、モックする必要があります。
上記の設定で参照されているモックファイル fileMock.js
と styleMock.js
を __mocks__
ディレクトリ内に作成します:
静的アセットの処理の詳細については、Jestドキュメントを参照してください。
フォントを処理するには、__mocks__
ディレクトリ内に nextFontMock.js
ファイルを作成し、次の設定を追加します:
プロジェクトがモジュールパスエイリアスを使用している場合、jsconfig.json
ファイルのパスオプションに一致するように、jest.config.js
ファイルのmoduleNameMapper
オプションでインポートを解決するよう設定する必要があります。例:
@testing-library/jest-dom
には、.toBeInTheDocument()
のような便利なカスタムマッチャーが含まれており、テストの作成を容易にします。次の設定を Jest 設定ファイルに追加することで、すべてのテストでカスタムマッチャーをインポートできます:
次に、jest.setup.ts
内で、以下のインポートを追加します:
補足:extend-expect
は v6.0
で削除されました。バージョン 6 より前の @testing-library/jest-dom
を使用している場合は、代わりに @testing-library/jest-dom/extend-expect
をインポートする必要があります。
各テストの前にさらにセットアップオプションを追加する必要がある場合は、上記の jest.setup.js
ファイルに追加できます。
最後に、package.json
ファイルに Jest の test
スクリプトを追加します:
jest --watch
はファイルが変更されたときにテストを再実行します。Jest CLI のオプションの詳細については、Jest のドキュメントを参照してください。
プロジェクトはテストを実行する準備ができました。プロジェクトのルートディレクトリに __tests__
フォルダを作成します。
例えば、<Home />
コンポーネントが見出しを正常にレンダリングするかをチェックするテストを追加できます:
オプションで、コンポーネントの予期せぬ変更を追跡するためのスナップショットテストを追加できます:
補足:テストファイルは Pages Router 内に含めないでください。Pages Router 内のファイルはルートとみなされます。
次のコマンドを実行してテストを実行します:
詳細については、以下のリソースが役立つでしょう: