Skip to content
Vitest 3
Main Navigation ガイド & API設定ブラウザモード高度なAPI
3.2.0
2.1.9
1.6.1
0.34.6

日本語

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
한국어
Italiano
Polski
Türkçe
čeština
magyar

日本語

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
한국어
Italiano
Polski
Türkçe
čeština
magyar

外観

Sidebar Navigation

はじめに

Vitest を選ぶ理由

はじめに

機能

Vitest の設定

API

テストAPIリファレンス

モック関数

Vi

expect

expectTypeOf

assert

assertType

ガイド

コマンドラインインターフェース

テストフィルタリング

テストプロジェクト

レポーター

カバレッジ

スナップショット

モック

並列処理

型テスト

Vitest UI

インソース・テスト

テストコンテキスト

テストアノテーション

テスト環境

マッチャーの拡張

IDE統合

デバッグ

よくあるエラー

移行ガイド

Vitest 3.0 への移行

Jest からの移行

パフォーマンス

テストパフォーマンスのプロファイリング

パフォーマンスの向上

ブラウザーモード

上級者向けAPI

他のテストランナーとの比較

このページの内容

テストプロジェクト ​

サンプルプロジェクト

GitHub - オンラインで試す

WARNING

この機能は workspace とも呼ばれます。workspace は 3.2 で廃止され、projects 構成に置き換えられました。機能的には同じです。

Vitestでは、単一のVitestプロセス内で複数のプロジェクト設定を定義できます。この機能は特にモノレポのセットアップに役立ちますが、resolve.alias、plugins、test.browserなど、異なる設定でテストを実行する際にも活用できます。

プロジェクトの定義 ​

ルートの設定でプロジェクトを定義できます。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

プロジェクト設定は、インライン設定、ファイル、またはプロジェクトを参照するグロブパターンで構成されます。例えば、プロジェクトを含むpackagesという名前のフォルダーがある場合、ルートのVitest設定で配列を定義できます。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Vitestは、packages内のすべてのフォルダーを、設定ファイルが内部になくても個別のプロジェクトとして扱います。このグロブパターンが_いずれかのファイル_に一致する場合、その名前にvitestが含まれていなくても、あるいは不明なファイル拡張子を持っていても、Vitest設定と見なされます。

WARNING

Vitestは、ルートのvitest.configファイルを、設定で明示的に指定されない限りプロジェクトとして扱いません。そのため、ルート設定はreportersやcoverageといったグローバルオプションにのみ影響します。Vitestは、ルート設定ファイルで指定されたapply、config、configResolved、configureServerといった特定のプラグインフックを常に実行する点に注意してください。Vitestは、グローバルセットアップとカスタムカバレッジプロバイダーを実行するためにも同じプラグインを使用します。

設定ファイルでプロジェクトを参照することもできます。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
  },
});

このパターンは、拡張子名の前にe2eまたはunitが含まれるvitest.configファイルを持つプロジェクトのみを含めます。

インライン設定を用いてプロジェクトを定義することも可能です。設定は両方の構文に同時に対応しています。

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: [
      // `packages` フォルダー内のすべてのフォルダーおよびファイルに一致
      'packages/*',
      {
        // ルート設定のオプションを継承するには "extends: true" を追加
        extends: true,
        test: {
          include: ['tests/**/*.{browser}.test.{ts,js}'],
          // インライン設定を使用する場合は名前を定義することをお勧めします
          name: 'happy-dom',
          environment: 'happy-dom',
        },
      },
      {
        test: {
          include: ['tests/**/*.{node}.test.{ts,js}'],
          // 名前ラベルの色は変更できます
          name: { label: 'node', color: 'green' },
          environment: 'node',
        },
      },
    ],
  },
});

WARNING

すべてのプロジェクトには一意の名前が必要です。そうしないと、Vitestはエラーをスローします。インライン設定で名前が指定されていない場合、Vitestは番号を割り当てます。グロブ構文で定義されたプロジェクト設定の場合、Vitestはデフォルトで最も近いpackage.jsonファイルの「name」プロパティを使用します。存在しない場合は、フォルダー名が使用されます。

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

ts
// @errors: 2769
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters" はプロジェクト設定ではサポートされていないため、
    // エラーが表示されます
    reporters: ['json'],
  },
});

テストの実行 ​

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

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

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

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

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

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run test --project e2e

TIP

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

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun 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',
    },
  })
);

また、extendsオプションを使用してルートレベルの設定から継承することも可能です。すべてのオプションがマージされます。

ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  test: {
    pool: 'threads',
    projects: [
      {
        // プラグインやプールなど、この設定からオプションを継承します
        extends: true,
        test: {
          name: 'unit',
          include: ['**/*.unit.test.ts'],
        },
      },
      {
        // この設定からオプションを継承しません
        // これがデフォルトの動作です
        extends: false,
        test: {
          name: 'integration',
          include: ['**/*.integration.test.ts'],
        },
      },
    ],
  },
});

サポートされていないオプション

一部の設定オプションはプロジェクト設定では許可されていません。特に次のとおりです。

  • coverage: カバレッジはプロセス全体に対して行われます
  • reporters: ルートレベルのレポーターのみがサポートされます
  • resolveSnapshotPath: ルートレベルのリゾルバーのみが尊重されます
  • テストランナーに影響しないその他のすべてのオプション

プロジェクト設定内でサポートされていないすべての設定オプションは、"Config"ガイドで*の記号でマークされています。それらはルート設定ファイルで一度定義する必要があります。

Pager
前のページテストフィルタリング
次のページレポーター

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/projects

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

Copyright (c) 2021-Present Vitest Team