ワークスペース
Vitest は、ワークスペース設定ファイルを通じて、モノレポを組み込みでサポートしています。ワークスペースを作成することで、プロジェクトの設定を定義し、管理することができます。
ワークスペースの定義
ワークスペースは、ルートディレクトリに vitest.workspace
または vitest.projects
ファイルを持つ必要があります(設定ファイルがある場合は、それと同じディレクトリに配置します)。Vitest は、このファイルに対して ts
、js
、json
の拡張子をサポートしています。
ワークスペース設定ファイルは、プロジェクトを参照するファイルまたは glob パターンのリストをデフォルト export する必要があります。たとえば、packages
という名前のプロジェクトを含むフォルダがある場合、次の構成ファイルでワークスペースを定義できます。
export default ['packages/*'];
Vitest は、packages
ディレクトリ内の各フォルダを、設定ファイルが存在しなくても個別のプロジェクトとして扱います。
WARNING
Vitest は、ルート設定をワークスペースプロジェクトとして扱いません(したがって、この構成で明示的に指定されていない限り、include
で指定されたテストは実行されません)。
設定ファイルを使ってプロジェクトを指定することもできます。
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
このパターンでは、ファイル名の拡張子の前に e2e
または unit
が含まれる vitest.config
ファイルを持つプロジェクトのみが対象となります。
WARNING
glob パターンでファイル名を指定する場合、設定ファイル名が vite.config
または vitest.config
で始まることを確認してください。そうでない場合、Vitest はそのファイルを無視します。
インライン設定を使ってプロジェクトを定義することもできます。ワークスペースファイルは、両方の構文を同時に使用することをサポートしています。
import { defineWorkspace } from 'vitest/config';
// defineWorkspace は、優れた型ヒントによる開発体験(DX)を提供します
export default defineWorkspace([
'packages/*',
{
// 2つの設定をマージするには "extends" を使用します
extends: './vite.config.js',
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// インライン設定を使用する場合は、名前を定義することを推奨します
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
name: 'node',
environment: 'node',
},
},
]);
WARNING
すべてのプロジェクトは一意の名前を持つ必要があります。そうでない場合、Vitest はエラーをスローします。インライン構成内に名前を指定しない場合、Vitest は自動的に番号を割り当てます。glob 構文で定義されたプロジェクト構成内に名前を指定しない場合、Vitest はデフォルトでディレクトリ名を使用します。
インライン構成を使用しない場合は、ルートディレクトリにシンプルな json ファイルを作成するだけで済みます。
["packages/*"]
ワークスペースプロジェクトは、すべての構成プロパティをサポートしているわけではありません。型の安全性を確保するため、プロジェクトの設定ファイル内では defineConfig
メソッドの代わりに defineProject
を使用してください。
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" はプロジェクト構成ではサポートされていないため、
// エラーが表示されます
reporters: ['json'],
},
});
構成
構成オプションはルートレベルの構成ファイルからは継承されません。共通の設定ファイルを作成し、それを各プロジェクトの設定とマージすることで、設定を共有できます。
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
また、構成オプションの一部は、プロジェクト構成では使用できません。主なものは以下の通りです。
coverage
: カバレッジはワークスペース全体で実行されますreporters
: ルートレベルのリポーターのみがサポートされますresolveSnapshotPath
: ルートレベルのリゾルバーのみが有効になります- その他、テストランナーの動作に影響を与えないすべてのオプション
TIP
プロジェクトの設定内でサポートされていない設定オプションには、"Config" ページに * のアイコンが表示されています。
カバレッジ
ワークスペースプロジェクトのカバレッジは、特別な設定なしに利用できます。ただし、all
オプションを有効にしており、一部のプロジェクトで非標準の拡張子を使用している場合は、ルートの設定ファイルでその拡張子を処理するためのプラグインが必要になる場合があります。
例えば、Vue ファイルを使用するパッケージがあり、独自の構成ファイルを持っているものの、一部のファイルがテストでインポートされていない場合、未使用ファイルの解析を試みるとカバレッジが失敗することがあります。これは、プロジェクトの設定ではなくルートの設定に基づいて分析が行われるためです。