ワークスペース
Vitestは、ワークスペース構成ファイルを通じてモノレポの組み込みサポートを提供します。ワークスペースを作成して、プロジェクトのセットアップを定義できます。
ワークスペースの定義
ワークスペースは、ルート(設定ファイルがある場合は同じフォルダー)にvitest.workspace
またはvitest.projects
ファイルを持つ必要があります。Vitestは、このファイルに対してts
/js
/json
拡張子をサポートしています。
ワークスペース構成ファイルには、プロジェクトを参照するファイルまたはグロブパターンのリストを含むデフォルトのエクスポートが必要です。たとえば、プロジェクトを含むpackages
という名前のフォルダーがある場合は、この構成ファイルでワークスペースを定義できます。
export default [
'packages/*'
]
Vitestは、packages
内のすべてのフォルダーを、内部に構成ファイルがない場合でも、個別のプロジェクトと見なします。
警告
Vitestは、この構成で指定されていない限り、ルート構成をワークスペースプロジェクトとは見なしません(したがって、include
で指定されたテストは実行されません)。
構成ファイルを使用してプロジェクトを参照することもできます。
export default [
'packages/*/vitest.config.{e2e,unit}.ts'
]
このパターンは、拡張子の前にe2e
とunit
を含むvitest.config
ファイルを持つプロジェクトのみを含めます。
警告
グロブパターンでファイル名を参照する場合は、構成ファイルがvite.config
またはvitest.config
で始まることを確認してください。そうしないと、Vitestはそれをスキップします。
インライン構成でプロジェクトを定義することもできます。ワークスペースファイルは、両方の構文を同時に使用することをサポートしています。
import { } from 'vitest/config'
// defineWorkspace provides a nice type hinting DX
export default ([
'packages/*',
{
// add "extends" to merge two configs together
: './vite.config.js',
: {
: ['tests/**/*.{browser}.test.{ts,js}'],
// it is recommended to define a name when using inline configs
: 'happy-dom',
: 'happy-dom',
}
},
{
: {
: ['tests/**/*.{node}.test.{ts,js}'],
: 'node',
: 'node',
}
}
])
警告
すべてのプロジェクトは一意の名前を持っている必要があります。そうしないと、Vitestはエラーをスローします。インライン構成内に名前を指定しない場合、Vitestは番号を割り当てます。グロブ構文で定義されたプロジェクト構成内に名前を指定しない場合、Vitestはデフォルトでディレクトリ名を使用します。
インライン構成に依存しない場合は、ルートディレクトリに小さなjsonファイルを作成するだけで済みます。
[
"packages/*"
]
ワークスペースプロジェクトは、すべての構成プロパティをサポートしているわけではありません。より良い型安全性のためには、プロジェクト構成ファイル内でdefineConfig
メソッドの代わりにdefineProject
を使用してください。
import { } from 'vitest/config'
export default ({
: {
: 'jsdom',
// "reporters" is not supported in a project config,
// so it will show an error
: ['json']
}
})
テストの実行
ワークスペース内でテストを実行するには、ルートのpackage.json
でスクリプトを定義します。
{
"scripts": {
"test": "vitest"
}
}
これで、パッケージマネージャーを使用してテストを実行できます。
npm run test
yarn test
pnpm run test
bun test
単一のプロジェクト内でのみテストを実行する必要がある場合は、--project
CLIオプションを使用します。
npm run test --project e2e
ヒント
CLIオプション--project
は、複数のプロジェクトをフィルターアウトするために複数回使用できます。
npm run 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',
}
})
)
また、一部の構成オプションはプロジェクト構成では許可されていません。最も注目すべきは
coverage
: カバレッジはワークスペース全体に対して実行されます。reporters
: ルートレベルのレポーターのみがサポートされます。resolveSnapshotPath
: ルートレベルのリゾルバーのみが尊重されます。- テストランナーに影響を与えないその他のすべてのオプション
ヒント
プロジェクト構成内でサポートされていないすべての構成オプションには、 * マークが"構成"ページにあります。
カバレッジ
ワークスペースプロジェクトのカバレッジは、すぐに使用できます。ただし、all
オプションが有効になっていて、一部のプロジェクトで非従来型の拡張子を使用している場合は、ルート構成ファイルでこの拡張子を処理するプラグインが必要になります。
たとえば、Vueファイルを使用するパッケージがあり、独自の構成ファイルがありますが、一部のファイルはテストにインポートされていない場合、カバレッジは、プロジェクト構成ではなくルート構成に依存するため、未使用のファイルの使用状況を分析しようとして失敗します。