詳細ガイド
テスト

ユニットテスト

Angularアプリケーションをテストすると、期待どおりに動作していることを確認できます。ユニットテストは、バグを早期に発見し、コード品質を確保し、安全なリファクタリングを促進するために不可欠です。

NOTE: このガイドでは、新しいAngular CLIプロジェクトのデフォルトテスト設定に焦点を当てています。既存のプロジェクトをKarmaからVitestに移行する場合は、KarmaからVitestへの移行ガイドを参照してください。Vitestはデフォルトのテストランナーですが、Karmaは引き続き完全にサポートされています。Karmaを使用したテストについては、Karmaテストガイドを参照してください。

テストの設定

Angular CLIは、Vitestテストフレームワークを使用してAngularアプリケーションをテストするために必要なものをすべてダウンロードしてインストールします。デフォルトでは、新しいプロジェクトにはvitestjsdomが含まれています。

Vitestは、jsdomを使用してDOMをエミュレートするNode.js環境でユニットテストを実行します。これにより、ブラウザを起動するオーバーヘッドを回避して、テストの実行を高速化できます。happy-domをインストールしてjsdomを削除することで、代替としてhappy-domを使用できます。CLIはhappy-domが存在する場合、自動的に検出して使用します。

CLIで作成したプロジェクトは、すぐにテストできます。ng test CLIコマンドを実行するだけです:

ng test

ng testコマンドはアプリケーションを_監視モード_でビルドし、Vitestテストランナーを起動します。

コンソールの出力は次のようになります:

 src/app/app.spec.ts (3) AppComponent should create the app AppComponent should have as title 'my-app' AppComponent should render title Test Files  1 passed (1)      Tests  3 passed (3)   Start at  18:18:01   Duration  2.46s (transform 615ms, setup 2ms, collect 2.21s, tests 5ms)

ng testコマンドは変更も監視します。これが実際にどのように機能するかを確認するには、app.tsを少し変更して保存します。テストが再び実行され、新しい結果がコンソールに表示されます。

設定

Angular CLIは、Vitestの設定のほとんどを処理します。多くの一般的なユースケースでは、angular.jsonファイルのオプションを直接変更することで、テストの動作を調整できます。

組み込み設定オプション

angular.jsonファイルのtestターゲットで次のオプションを変更できます:

  • include: テストに含めるファイルのGlobパターン。デフォルトは['**/*.spec.ts', '**/*.test.ts']です。
  • exclude: テストから除外するファイルのGlobパターン。
  • setupFiles: テストの前に実行されるグローバルセットアップファイル(ポリフィルやグローバルモックなど)へのパスのリスト。
  • providersFile: テスト環境用のAngularプロバイダーのデフォルト配列をエクスポートするファイルへのパス。これは、テストに注入されるグローバルテストプロバイダーをセットアップするのに役立ちます。
  • coverage: コードカバレッジレポートを有効または無効にするブール値。デフォルトはfalseです。
  • browsers: テストを実行するブラウザ名の配列(例: ["chromium"])。ブラウザプロバイダーのインストールが必要です。

たとえば、src/test-providers.tsファイルを作成して、すべてのテストにprovideHttpClientTestingを提供できます:

import { Provider } from '@angular/core';import { provideHttpClient } from '@angular/common/http';import { provideHttpClientTesting } from '@angular/common/http/testing';const testProviders: Provider[] = [  provideHttpClient(),  provideHttpClientTesting(),];export default testProviders;

次に、このファイルをangular.jsonで参照します:

{  "projects": {    "your-project-name": {      "architect": {        "test": {          "builder": "@angular/build:unit-test",          "options": {            "include": ["src/**/*.spec.ts"],            "setupFiles": ["src/test-setup.ts"],            "providersFile": "src/test-providers.ts",            "coverage": true,            "browsers": ["chromium"]          }        }      }    }  }}

高度: カスタムVitest設定

高度なユースケースでは、カスタムVitest設定ファイルを提供できます。

IMPORTANT: カスタム設定を使用すると高度なオプションが有効になりますが、Angularチームは設定ファイルの特定の内容やその中で使用されるサードパーティプラグインについて直接サポートを提供していません。CLIは、適切な動作を保証するために特定のプロパティ(test.projectstest.include)を上書きします。

Vitest設定ファイル(例: vitest-base.config.ts)を作成し、runnerConfigオプションを使用してangular.jsonで参照できます。

{  "projects": {    "your-project-name": {      "architect": {        "test": {          "builder": "@angular/build:unit-test",          "options": {            "runnerConfig": "vitest-base.config.ts"          }        }      }    }  }}

CLIを使用して基本設定ファイルを生成できます:

ng generate config vitest

これにより、カスタマイズ可能なvitest-base.config.tsファイルが作成されます。

HELPFUL: Vitestの設定について詳しくは、Vitest設定ガイドを参照してください。

コードカバレッジ

ng testコマンドに--coverageフラグを追加することで、コードカバレッジレポートを生成できます。レポートはcoverage/ディレクトリに生成されます。

前提条件、カバレッジしきい値の適用、高度な設定の詳細については、コードカバレッジガイドを参照してください。

ブラウザでのテストの実行

デフォルトのNode.js環境はほとんどのユニットテストで高速ですが、実際のブラウザでテストを実行できます。これは、ブラウザ固有のAPI(レンダリングなど)に依存するテストやデバッグに役立ちます。

ブラウザでテストを実行するには、最初にブラウザプロバイダーをインストールする必要があります。 ニーズに基づいて、次のブラウザプロバイダーのいずれかを選択してください:

  • Playwright: @vitest/browser-playwright (Chromium、Firefox、WebKit用)
  • WebdriverIO: @vitest/browser-webdriverio (Chrome、Firefox、Safari、Edge用)
  • Preview: @vitest/browser-preview (StackBlitzなどのWebcontainer環境用)

プロバイダーがインストールされたら、--browsersフラグを使用してブラウザでテストを実行できます:

# Playwrightの例ng test --browsers=chromium# WebdriverIOの例ng test --browsers=chrome

CI環境変数が設定されている場合、ヘッドレスモードが自動的に有効になります。それ以外の場合、テストはヘッド付きブラウザで実行されます。

その他のテストフレームワーク

Angularアプリケーションは、他のテストライブラリとテストランナーでもユニットテストできます。各ライブラリとランナーには、それぞれ独自のインストール手順、設定、構文があります。

継続的インテグレーションでのテスト

堅牢なテストスイートは、継続的インテグレーション(CI)パイプラインの重要な部分です。CIサーバーを使用すると、プロジェクトリポジトリを設定して、すべてのコミットとプルリクエストでテストを実行できます。

継続的インテグレーション(CI)サーバーでAngularアプリケーションをテストするには、通常、標準のテストコマンドを実行します:

ng test

ほとんどのCIサーバーはCI=true環境変数を設定しており、ng testはこれを検出します。これにより、適切な非対話型のシングルランモードでテストが自動的に実行されます。

CIサーバーがこの変数を設定しない場合、または手動でシングルランモードを強制する必要がある場合は、--no-watchおよび--no-progressフラグを使用できます:

ng test --no-watch --no-progress

テストに関する追加情報

アプリケーションのテストを設定したら、次のテストガイドが役立つ場合があります。

詳細
コードカバレッジ テストがアプリケーションのどの部分をカバーしているか、および必要な量の指定方法。
サービスのテスト アプリケーションで使用しているサービスのテスト方法。
コンポーネントのテストの基本 Angularコンポーネントのテストの基本。
コンポーネントテストシナリオ さまざまな種類のコンポーネントテストシナリオとユースケース。
属性ディレクティブのテスト 属性ディレクティブのテスト方法。
パイプのテスト パイプのテスト方法。
テストのデバッグ 一般的なテストのバグ。
ユーティリティAPIのテスト Angularのテスト機能。