Next.jsでのCypressセットアップ
Cypressは、エンドツーエンド(E2E)およびコンポーネントテストに使用されるテストランナーです。このページでは、Next.jsでCypressをセットアップし、最初のテストを作成する方法を説明します。
警告:
- コンポーネントテストでは、Cypressは現在Next.js version 14と
async
サーバーコンポーネントをサポートしていません。これらの問題は追跡中です。現時点では、コンポーネントテストはNext.js version 13で動作し、async
サーバーコンポーネントではE2Eテストをお勧めします。- Cypressバージョン13.6.3未満は、
moduleResolution:"bundler"
を使用するTypeScriptバージョン5をサポートしていません。ただし、この問題はCypressバージョン13.6.3以降で解決されています。cypress v13.6.3
手動セットアップ
Cypressを手動でセットアップするには、cypress
を開発依存関係としてインストールします:
Cypressのopen
コマンドをpackage.json
スクリプトフィールドに追加します:
初めてCypressを実行し、Cypressテストスイートを開きます:
E2Eテストおよび/またはコンポーネントテストを選択できます。いずれかのオプションを選択すると、自動的にcypress.config.js
ファイルとプロジェクト内にcypress
フォルダーが作成されます。
最初のCypress E2Eテストの作成
cypress.config.js
ファイルに以下の設定があることを確認します:
次に、2つの新しいNext.jsファイルを作成します:
ナビゲーションが正しく機能するかをチェックするテストを追加します:
E2Eテストの実行
Cypressはユーザーがアプリケーションをナビゲートするのをシミュレートするため、Next.jsサーバーを実行する必要があります。アプリケーションの動作をより忠実に再現するために、本番コードに対してテストを実行することをお勧めします。
npm run build && npm run start
を実行してNext.jsアプリケーションをビルドし、別のターミナルウィンドウでnpm run cypress:open
を実行してCypressを起動し、E2Eテストスイートを実行します。
補足:
cypress.config.js
設定ファイルにbaseUrl: 'http://localhost:3000'
を追加することで、cy.visit("http://localhost:3000/")
の代わりにcy.visit("/")
を使用できます。- あるいは、
start-server-and-test
パッケージをインストールして、Cypressと併せてNext.jsの本番サーバーを実行することもできます。インストール後、package.json
スクリプトフィールドに"test": "start-server-and-test start http://localhost:3000 cypress"
を追加します。新しい変更後はアプリケーションを再ビルドすることを忘れないでください。
最初のCypressコンポーネントテストの作成
コンポーネントテストは、サーバーを起動したりアプリケーション全体をバンドルしたりせずに、特定のコンポーネントをビルドおよびマウントします。
Cypressアプリでコンポーネントテストを選択し、フロントエンドフレームワークとしてNext.jsを選択します。プロジェクト内にcypress/component
フォルダーが作成され、cypress.config.js
ファイルがコンポーネントテストを有効にするために更新されます。
cypress.config.js
ファイルに以下の設定があることを確認します:
前のセクションと同じコンポーネントを想定し、コンポーネントが期待される出力をレンダリングしているかを検証するテストを追加します:
補足:
- Cypressは現在、
async
サーバーコンポーネントのコンポーネントテストをサポートしていません。E2Eテストの使用をお勧めします。- コンポーネントテストではNext.jsサーバーを必要としないため、サーバーが利用可能であることに依存する
<Image />
などの機能は、そのままでは機能しない場合があります。
コンポーネントテストの実行
ターミナルでnpm run cypress:open
を実行して、Cypressを起動し、コンポーネントテストスイートを実行します。
継続的インテグレーション(CI)
対話型テストに加えて、CI環境により適したcypress run
コマンドを使用して、Cypressをヘッドレスモードで実行することもできます:
Cypressと継続的インテグレーションについて、さらに詳しく学ぶためのリソースがあります: