コンテンツにスキップ

ワークスペース

サンプルプロジェクト

GitHub - オンラインで試す

Vitestは、ワークスペース構成ファイルを通じてモノレポの組み込みサポートを提供します。ワークスペースを作成して、プロジェクトのセットアップを定義できます。

ワークスペースの定義

ワークスペースは、ルート(設定ファイルがある場合は同じフォルダー)にvitest.workspaceまたはvitest.projectsファイルを持つ必要があります。Vitestは、このファイルに対してts/js/json拡張子をサポートしています。

ワークスペース構成ファイルには、プロジェクトを参照するファイルまたはグロブパターンのリストを含むデフォルトのエクスポートが必要です。たとえば、プロジェクトを含むpackagesという名前のフォルダーがある場合は、この構成ファイルでワークスペースを定義できます。

ts
export default [
  'packages/*'
]

Vitestは、packages内のすべてのフォルダーを、内部に構成ファイルがない場合でも、個別のプロジェクトと見なします。

警告

Vitestは、この構成で指定されていない限り、ルート構成をワークスペースプロジェクトとは見なしません(したがって、includeで指定されたテストは実行されません)。

構成ファイルを使用してプロジェクトを参照することもできます。

ts
export default [
  'packages/*/vitest.config.{e2e,unit}.ts'
]

このパターンは、拡張子の前にe2eunitを含むvitest.configファイルを持つプロジェクトのみを含めます。

警告

グロブパターンでファイル名を参照する場合は、構成ファイルがvite.configまたはvitest.configで始まることを確認してください。そうしないと、Vitestはそれをスキップします。

インライン構成でプロジェクトを定義することもできます。ワークスペースファイルは、両方の構文を同時に使用することをサポートしています。

ts
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ファイルを作成するだけで済みます。

json
[
  "packages/*"
]

ワークスペースプロジェクトは、すべての構成プロパティをサポートしているわけではありません。より良い型安全性のためには、プロジェクト構成ファイル内でdefineConfigメソッドの代わりにdefineProjectを使用してください。

ts
import {  } from 'vitest/config'

export default ({
  : {
    : 'jsdom',
    // "reporters" is not supported in a project config,
    // so it will show an error
    : ['json']
  }
})

テストの実行

ワークスペース内でテストを実行するには、ルートのpackage.jsonでスクリプトを定義します。

json
{
  "scripts": {
    "test": "vitest"
  }
}

これで、パッケージマネージャーを使用してテストを実行できます。

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun test

単一のプロジェクト内でのみテストを実行する必要がある場合は、--project CLIオプションを使用します。

bash
npm run test --project e2e

ヒント

CLIオプション--projectは、複数のプロジェクトをフィルターアウトするために複数回使用できます。

bash
npm run test --project e2e --project unit

構成

構成オプションは、ルートレベルの構成ファイルからは継承されません。共有構成ファイルを作成し、自分でプロジェクト構成とマージできます。

ts
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ファイルを使用するパッケージがあり、独自の構成ファイルがありますが、一部のファイルはテストにインポートされていない場合、カバレッジは、プロジェクト構成ではなくルート構成に依存するため、未使用のファイルの使用状況を分析しようとして失敗します。

MITライセンスの下でリリースされています。