ワークスペース
サンプルプロジェクト
Vitest は、単一の Vitest プロセス内で複数のプロジェクト設定を定義する機能を提供します。この機能は、モノレポのセットアップに特に有用ですが、resolve.alias
、plugins
、test.browser
など、異なる設定でテストを実行する際にも利用できます。
ワークスペースの定義
ワークスペースのルートディレクトリ(ルート設定ファイルまたは作業ディレクトリと同じフォルダ内)には、vitest.workspace
または vitest.projects
ファイルが含まれている必要があります。Vitest はこのファイルで ts
、js
、json
の拡張子をサポートしています。
命名規則
この機能は workspace
と呼ばれ、workspaces
(末尾に "s" なし) ではないことに注意してください。
ワークスペース設定ファイルは、プロジェクトを参照するファイルまたはグロブパターンのリストをデフォルトエクスポートする必要があります。たとえば、プロジェクトを含む packages
という名前のフォルダがある場合、この設定ファイルでワークスペースを定義できます。
export default ['packages/*'];
Vitest は、packages
内のすべてのフォルダを、内部に設定ファイルがなくても個別のプロジェクトとして扱います。Vitest 2.1 以降、このグロブパターンがファイルに一致する場合、その名前に vitest
が含まれていなくても Vitest の設定ファイルと見なされます。
WARNING
Vitest は、ルートの vitest.config
ファイルを、ワークスペース設定で明示的に指定しない限り、ワークスペースプロジェクトとして扱いません。したがって、ルート設定は reporters
や coverage
などのグローバルオプションにのみ影響します。
設定ファイルを使用してプロジェクトを参照することもできます。
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
このパターンは、拡張子の前に e2e
または unit
を含む vitest.config
ファイルを持つプロジェクトのみを対象とします。
インライン設定を使用してプロジェクトを定義することも可能です。ワークスペースファイルは両方の構文を同時にサポートしています。
import { defineWorkspace } from 'vitest/config';
// defineWorkspace は優れた型ヒントの DX を提供します
export default defineWorkspace([
// `packages` フォルダ内のすべてのフォルダとファイルに一致します
'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 は数値を割り当てます。グロブ構文で定義されたプロジェクト設定の場合、Vitest はデフォルトで最も近い package.json
ファイルの「name」プロパティを使用するか、存在しない場合はフォルダ名を使用します。
インライン設定を使用しない場合は、ルートディレクトリに小さな JSON ファイルを作成できます。
["packages/*"]
ワークスペースプロジェクトはすべての設定プロパティをサポートしているわけではありません。より良い型安全のために、プロジェクト設定ファイル内では defineConfig
の代わりに defineProject
メソッドを使用してください。
// @errors: 2769
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" はプロジェクト設定ではサポートされていないため、
// エラーが表示されます
reporters: ['json'],
},
});
テストの実行
ワークスペース内でテストを実行するには、ルートの package.json
にスクリプトを定義します。
{
"scripts": {
"test": "vitest"
}
}
これで、パッケージマネージャーを使用してテストを実行できます。
npm run test
yarn test
pnpm run test
bun test
単一のプロジェクト内でのみテストを実行する必要がある場合は、--project
CLI オプションを使用します。
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun test --project e2e
TIP
CLI オプション --project
は、複数のプロジェクトをフィルタリングするために複数回使用できます。
npm run test --project e2e --project unit
yarn test --project e2e --project unit
pnpm run test --project e2e --project unit
bun test --project e2e --project unit
設定
設定オプションはルートレベルの設定ファイルから継承されません。共有設定ファイルを作成し、それをプロジェクト設定と自分でマージできます。
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
defineWorkspace
レベルでは、extends
オプションを使用してルートレベルの設定から継承できます。すべてのオプションがマージされます。
import { defineWorkspace } from 'vitest/config';
export default defineWorkspace([
{
extends: './vitest.config.ts',
test: {
name: 'unit',
include: ['**/*.unit.test.ts'],
},
},
{
extends: './vitest.config.ts',
test: {
name: 'integration',
include: ['**/*.integration.test.ts'],
},
},
]);
一部の設定オプションはプロジェクト設定では許可されていません。特に次のとおりです。
coverage
: カバレッジはワークスペース全体に対して行われますreporters
: ルートレベルのレポーターのみがサポートされますresolveSnapshotPath
: ルートレベルのリゾルバーのみが尊重されます- テストランナーに影響しないその他のすべてのオプション
TIP
プロジェクト設定内でサポートされていないすべての設定オプションは、"Config" ガイドで * の記号でマークされています。