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

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

このページの内容

Vitest の設定 ​

Vite を使用しており、vite.config ファイルが存在する場合、Vitest はそのファイルを読み込み、Vite アプリケーションのプラグインや設定を適用します。テスト用に異なる設定が必要な場合、またはメインアプリケーションが Vite に特に依存しない場合は、以下のいずれかの方法を使用できます。

  • vitest.config.ts を作成する。このファイルは vite.config.ts よりも高い優先順位を持ち、その設定を上書きします(Vitest は従来のすべての JS および TS 拡張子をサポートしますが、json はサポートしません)。これは、vite.config 内のすべてのオプションが無視されることを意味します。
  • CLI に --config オプションを渡す。例: vitest --config ./path/to/vitest.config.ts
  • process.env.VITEST または defineConfig の mode プロパティ(--mode で上書きされない限り test/benchmark に設定されます)を使用して、vite.config.ts で条件付きで異なる設定を適用する。

vitest 自体を設定するには、Vite の設定に test プロパティを追加します。また、defineConfig を vite 自体からインポートしている場合は、設定ファイルの先頭にトリプルスラッシュコマンドを使用して Vitest の型定義を参照する必要があります。

設定例を開く

Vite から defineConfig を使用する場合、以下のようにします。

ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // ... ここにオプションを指定します。
  },
});

<reference types="vitest" /> は Vitest 4 では動作しなくなりますが、vitest/config への移行はすでに開始できます。

ts
/// <reference types="vitest/config" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // ... ここにオプションを指定します。
  },
});

vitest/config から defineConfig を使用する場合は、以下のようにします。

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

export default defineConfig({
  test: {
    // ... ここにオプションを指定します。
  },
});

必要に応じて、Vitest のデフォルトオプションを取得して拡張することができます。

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

export default defineConfig({
  test: {
    exclude: [...configDefaults.exclude, 'packages/template/*'],
  },
});

個別の vitest.config.js を使用する場合、必要に応じて別の設定ファイルから Vite のオプションを拡張することもできます。

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default mergeConfig(
  viteConfig,
  defineConfig({
    test: {
      exclude: ['packages/template/*'],
    },
  })
);

Vite の設定が関数として定義されている場合、以下のように設定を定義できます。

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default defineConfig(configEnv =>
  mergeConfig(
    viteConfig(configEnv),
    defineConfig({
      test: {
        exclude: ['packages/template/*'],
      },
    })
  )
);

WARNING

このページに_記載されているすべてのオプション_は、設定の test プロパティ配下にあります。

ts
export default defineConfig({
  test: {
    exclude: [],
  },
});

Vitest は Vite の設定を使用するため、Vite の設定オプションも使用できます。たとえば、グローバル変数を定義するための define や、エイリアスを定義するための resolve.alias などです。これらのオプションは、test プロパティ内ではなく、トップレベルで定義する必要があります。

プロジェクト設定内でサポートされていない設定オプションには、* の記号が付いています。これは、それらがルートの Vitest 設定でのみ設定できることを意味します。

include ​

  • 型: string[]
  • デフォルト: ['**/*.{test,spec}.?(c|m)[jt]s?(x)']
  • CLI: vitest [...include], vitest **/*.test.js

テストファイルに合致するグロブパターンのリストです。

注

カバレッジを使用する場合、Vitest はテストファイルの include パターンをカバレッジのデフォルトの exclude パターンに自動的に追加します。coverage.exclude を参照してください。

exclude ​

  • 型: string[]
  • デフォルト: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*']
  • CLI: vitest --exclude "**/excluded-file"

テストファイルから除外すべきグロブパターンのリストです。

WARNING

このオプションはカバレッジレポートには影響しません。カバレッジレポートから特定のファイルを除外する必要がある場合は、coverage.exclude を使用してください。

これは、CLI フラグで指定した場合に設定を上書きしない唯一のオプションです。--exclude フラグを介して追加されたすべてのグロブパターンは、設定の exclude に追加されます。

includeSource ​

  • 型: string[]
  • デフォルト: []

インソーステストファイルを含めるためのグロブパターン。

定義されている場合、Vitest は import.meta.vitest を含むすべての一致するファイルを実行します。

name ​

  • 型: string | { label: string, color?: LabelColor }

テストプロジェクトまたは Vitest プロセスにカスタム名を割り当てます。この名前は CLI および UI で表示され、Node.js API では project.name を介して利用できます。

CLI および UI で使用される色は、color プロパティを持つオブジェクトを指定することで変更できます。

server ​

  • 型: { sourcemap?, deps?, ... }

Vite-Node サーバーオプション。

server.sourcemap ​

  • 型: 'inline' | boolean
  • デフォルト: 'inline'

モジュールにインラインソースマップを注入します。

server.debug ​

  • 型: { dumpModules?, loadDumppedModules? }

Vite-Node デバッガーオプション。

server.debug.dumpModules ​

  • 型: boolean | string

変換されたモジュールをファイルシステムにダンプします。文字列を渡すと、指定されたパスにダンプされます。

server.debug.loadDumppedModules ​

  • 型: boolean

ダンプされたモジュールがファイルシステムに存在する場合、それを読み込みます。ファイルシステムからダンプ結果を修正してデバッグするのに役立ちます。

server.deps ​

  • 型: { external?, inline?, ... }

依存関係の解決の処理。

server.deps.external ​

  • 型: (string | RegExp)[]
  • デフォルト: [/\/node_modules\//]

外部化とは、Vite がパッケージの処理をネイティブ Node に任せることを意味します。外部化された依存関係は Vite のトランスフォーマーとリゾルバーに適用されないため、リロード時の HMR をサポートしません。デフォルトでは、node_modules 内のすべてのパッケージは外部化されます。

これらのオプションは、node_modules に存在する、または deps.moduleDirectories 内で指定されているパッケージ名をサポートします。たとえば、packages/some-name 内にあるパッケージ @company/some-name は some-name として指定する必要があり、packages は deps.moduleDirectories に含める必要があります。基本的に、Vitest は常に実際のパッケージ名ではなくファイルパスをチェックします。

正規表現が使用されている場合、Vitest はパッケージ名ではなく_ファイルパス_に対してそれを適用します。

server.deps.inline ​

  • 型: (string | RegExp)[] | true
  • デフォルト: []

Vitest はインラインモジュールを変換します。これは、ESM 形式で .js を提供するパッケージ(Node がそのままでは処理できない)を処理するのに役立ちます。

true の場合、すべての依存関係がインライン化されます。ssr.noExternal で指定されたすべての依存関係は、デフォルトでインライン化されます。

server.deps.fallbackCJS ​

  • 型 boolean
  • デフォルト: false

依存関係が有効な ESM パッケージである場合、パスに基づいて cjs バージョンを推測しようとします。これは、依存関係が間違った ESM ファイルを持っている場合に役立つかもしれません。

これにより、パッケージが ESM モードと CJS モードで異なるロジックを持っている場合、潜在的に不整合が発生する可能性があります。

server.deps.cacheDir ​

  • 型 string
  • デフォルト: 'node_modules/.vite'

キャッシュファイルを保存するディレクトリ。

deps ​

  • 型: { optimizer?, ... }

依存関係の解決の処理。

deps.optimizer ​

  • 型: { ssr?, web? }
  • 参照: 依存関係最適化オプション

依存関係の最適化を有効にします。テストが多い場合、この機能によってパフォーマンスが向上する可能性があります。

Vitest が include にリストされている外部ライブラリを検出すると、esbuild を使用して単一のファイルにバンドルされ、モジュール全体としてインポートされます。これはいくつかの理由で良いことです。

  • 多くのインポートを持つパッケージのインポートはコストがかかります。それらを1つのファイルにバンドルすることで、多くの時間を節約できます。
  • UI ライブラリのインポートは、Node.js 内で実行されることを意図していないため、コストがかかります。
  • alias 設定がバンドルされたパッケージ内で有効になります。
  • テスト内のコードは、ブラウザで実行される方法に近くなります。

deps.optimizer?.[mode].include オプションのパッケージのみがバンドルされることに注意してください(Svelte のような一部のプラグインはこれを自動的に設定します)。利用可能なオプションの詳細については、Vite ドキュメントを参照してください(Vitest は disable および noDiscovery オプションをサポートしていません)。デフォルトでは、Vitest は jsdom および happy-dom 環境には optimizer.web を使用し、node および edge 環境には optimizer.ssr を使用しますが、これは transformMode で設定可能です。

このオプションは、optimizeDeps 設定も継承します(Web の場合、Vitest は optimizeDeps を拡張し、SSR の場合、ssr.optimizeDeps を拡張します)。deps.optimizer で include/exclude オプションを再定義すると、テスト実行時に optimizeDeps の設定が拡張されます。Vitest は、exclude にリストされている場合、include から同じオプションを自動的に削除します。

TIP

コードが実際には cacheDir または test.cache.dir ディレクトリにあるため、デバッグのために node_modules コードを編集することはできません。console.log ステートメントでデバッグしたい場合は、直接編集するか、deps.optimizer?.[mode].force オプションで再バンドルを強制してください。

deps.optimizer.{mode}.enabled ​

  • 型: boolean
  • デフォルト: false

依存関係の最適化を有効にします。

deps.web ​

  • 型: { transformAssets?, ... }

変換モードが web に設定されている場合に外部ファイルに適用されるオプション。デフォルトでは、jsdom と happy-dom は web モードを使用し、node と edge 環境は ssr 変換モードを使用するため、これらのオプションはそれらの環境内のファイルには影響しません。

通常、node_modules 内のファイルは外部化されますが、これらのオプションは server.deps.external 内のファイルにも影響します。

deps.web.transformAssets ​

  • 型: boolean
  • デフォルト: true

Vitest はアセット(.png、.svg、.jpg など)ファイルを処理し、Vite がブラウザで行うように解決すべきか。

このモジュールは、クエリが指定されていない場合、アセットへのパスをデフォルトエクスポートします。

WARNING

現時点では、このオプションは vmThreads および vmForks プールでのみ機能します。

deps.web.transformCss ​

  • 型: boolean
  • デフォルト: true

Vitest は CSS(.css、.scss、.sass など)ファイルを処理し、Vite がブラウザで行うように解決すべきか。

CSS ファイルが css オプションで無効になっている場合、このオプションは ERR_UNKNOWN_FILE_EXTENSION エラーを抑制するだけです。

WARNING

現時点では、このオプションは vmThreads および vmForks プールでのみ機能します。

deps.web.transformGlobPattern ​

  • 型: RegExp | RegExp[]
  • デフォルト: []

変換すべき外部ファイルに一致する正規表現パターン。

デフォルトでは、node_modules 内のファイルは外部化され、CSS またはアセットでない限り変換されません(対応するオプションが無効になっていない場合)。

WARNING

現時点では、このオプションは vmThreads および vmForks プールでのみ機能します。

deps.interopDefault ​

  • 型: boolean
  • デフォルト: true

CJS モジュールのデフォルトを名前付きエクスポートとして解釈します。一部の依存関係は CJS モジュールのみをバンドルし、require 構文ではなく import 構文を使用してパッケージがインポートされたときに Node.js が静的に解析できる名前付きエクスポートを使用しません。Node 環境で名前付きエクスポートを使用してそのような依存関係をインポートすると、次のエラーが表示されます。

import { read } from 'fs-jetpack';
         ^^^^
SyntaxError: Named export 'read' not found. The requested module 'fs-jetpack' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export.

Vitest は静的解析を行わず、実行中のコードがエラーをスローするまで失敗しないため、この機能が無効になっている場合、テスト実行時にこのエラーが表示される可能性が最も高いです。

TypeError: createAsyncThunk is not a function
TypeError: default is not a function

デフォルトでは、Vitest はこの問題を回避するためにバンドラーを使用していると仮定し、失敗しませんが、コードが処理されない場合はこの動作を手動で無効にできます。

deps.moduleDirectories ​

  • 型: string[]
  • デフォルト: ['node_modules']

モジュールディレクトリとして扱われるべきディレクトリのリスト。この設定オプションは vi.mock の動作に影響します。ファクトリが提供されておらず、モックするもののパスが moduleDirectories のいずれかの値に一致する場合、Vitest はプロジェクトのルートにある __mocks__ フォルダーを探してモックを解決しようとします。

このオプションは、依存関係を外部化する際にファイルがモジュールとして扱われるかどうかに影響します。デフォルトでは、Vitest は Vite の変換ステップをバイパスして、ネイティブ Node.js で外部モジュールをインポートします。

このオプションを設定すると、デフォルトが_上書き_されます。node_modules を引き続きパッケージ検索に含めたい場合は、他のオプションと一緒に含めてください。

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

export default defineConfig({
  test: {
    deps: {
      moduleDirectories: ['node_modules', path.resolve('../../packages')],
    },
  },
});

runner ​

  • 型: VitestRunnerConstructor
  • デフォルト: テスト実行時は node、ベンチマーク実行時は benchmark

カスタムテストランナーへのパス。これは高度な機能であり、カスタムライブラリランナーで使用されます。詳細については、ドキュメントを参照してください。

benchmark ​

  • 型: { include?, exclude?, ... }

vitest bench 実行時に使用されるオプション。

benchmark.include ​

  • 型: string[]
  • デフォルト: ['**/*.{bench,benchmark}.?(c|m)[jt]s?(x)']

ベンチマークテストファイルのグロブを含めます。

benchmark.exclude ​

  • 型: string[]
  • デフォルト: ['node_modules', 'dist', '.idea', '.git', '.cache']

ベンチマークテストファイルから除外するグロブ。

benchmark.includeSource ​

  • 型: string[]
  • デフォルト: []

インソースベンチマークテストファイルを含めるためのグロブパターン。このオプションは includeSource に似ています。

定義されている場合、Vitest は import.meta.vitest を含むすべての一致するファイルを実行します。

benchmark.reporters ​

  • 型: Arrayable<BenchmarkBuiltinReporters | Reporter>
  • デフォルト: 'default'

出力用のカスタムレポーター。1つ以上の組み込みレポート名、レポーターインスタンス、および/またはカスタムレポーターへのパスを含めることができます。

benchmark.outputFile ​

benchmark.outputJson に置き換えられ非推奨になりました。

benchmark.outputJson ​

  • 型: string | undefined
  • デフォルト: undefined

ベンチマーク結果を保存するファイルパス。これは後で --compare オプションで利用できます。

例:

sh
# save main branch's result
git checkout main
vitest bench --outputJson main.json

# change a branch and compare against main
git checkout feature
vitest bench --compare main.json

benchmark.compare ​

  • 型: string | undefined
  • デフォルト: undefined

現在の実行と比較するための以前のベンチマーク結果へのファイルパス。

alias ​

  • 型: Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>

テスト実行時にカスタムエイリアスを定義できます。これらは resolve.alias のエイリアスとマージされます。

WARNING

Vitest は Vite SSR プリミティブを使用してテストを実行します。これには特定の注意点があります。

  1. エイリアスは、インライン化されたモジュールによって import キーワードで直接インポートされたモジュールにのみ影響します(すべてのソースコードはデフォルトでインライン化されます)。
  2. Vitest は require 呼び出しのエイリアスをサポートしていません。
  3. 外部依存関係をエイリアス化する場合(例: react -> preact)、外部化された依存関係で機能させるために、実際の node_modules パッケージをエイリアス化することをお勧めします。Yarn と pnpm の両方が npm: プレフィックスを介したエイリアスをサポートしています。

globals ​

  • 型: boolean
  • デフォルト: false
  • CLI: --globals, --globals=false

デフォルトでは、vitest は明示性を重視するためグローバル API を提供しません。Jest のようにグローバルに API を使用したい場合は、CLI に --globals オプションを渡すか、設定に globals: true を追加します。

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

export default defineConfig({
  test: {
    globals: true,
  },
});

グローバル API で TypeScript を機能させるには、tsconfig.json の types フィールドに vitest/globals を追加します。

json
{
  "compilerOptions": {
    "types": ["vitest/globals"]
  }
}

コンパイルにさらに多くの型を含めるために typeRoots を再定義している場合、vitest/globals を認識させるために node_modules を再度追加する必要があります。

json
{
  "compilerOptions": {
    "typeRoots": ["./types", "./node_modules/@types", "./node_modules"],
    "types": ["vitest/globals"]
  }
}

プロジェクトで既に unplugin-auto-import を使用している場合は、これらの API を自動インポートするために直接使用することもできます。

ts
import { defineConfig } from 'vitest/config';
import AutoImport from 'unplugin-auto-import/vite';

export default defineConfig({
  plugins: [
    AutoImport({
      imports: ['vitest'],
      dts: true, // TypeScript 宣言を生成
    }),
  ],
});

environment ​

  • 型: 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string
  • デフォルト: 'node'
  • CLI: --environment=<env>

テストに使用される環境。Vitest のデフォルト環境は Node.js 環境です。Web アプリケーションを構築している場合は、jsdom または happy-dom を介してブラウザのような環境を使用できます。

エッジ関数を構築している場合は、edge-runtime 環境を使用することが可能です。

TIP

ブラウザモードを使用して、環境をモックせずにブラウザで統合テストまたはユニットテストを実行することもできます。

ファイルの先頭に @vitest-environment ドックブロックまたはコメントを追加することで、そのファイル内のすべてのテストに使用する別の環境を指定できます。

ドックブロックスタイル:

js
/**
 * @vitest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

コメントスタイル:

js
// @vitest-environment happy-dom

test('use happy-dom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

Jest との互換性のために、@jest-environment もあります。

js
/**
 * @jest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

Vitest を --isolate=false フラグで実行している場合、テストは node、jsdom、happy-dom、edge-runtime、カスタム環境 の順序で実行されます。つまり、同じ環境を持つすべてのテストはグループ化されますが、それでも順次実行されます。

0.23.0 以降、カスタム環境を定義できるようになりました。組み込み以外の環境が使用される場合、Vitest はパッケージ vitest-environment-${name} をロードしようとします。そのパッケージは Environment 型のオブジェクトをエクスポートする必要があります。

ts
import type { Environment } from 'vitest';

export default <Environment>{
  name: 'custom',
  transformMode: 'ssr',
  setup() {
    // custom setup
    return {
      teardown() {
        // この環境ですべてのテストが実行された後に呼び出されます
      },
    };
  },
};

Vitest は、拡張したい場合に備えて、vitest/environments エントリを介して builtinEnvironments も公開しています。環境の拡張については、ガイドで詳しく説明しています。

TIP

jsdom 環境は、現在の JSDOM インスタンスと等しい jsdom グローバル変数を公開します。TypeScript がそれを認識するようにするには、この環境を使用するときに tsconfig.json に vitest/jsdom を追加できます。

json
{
  "compilerOptions": {
    "types": ["vitest/jsdom"]
  }
}

environmentOptions ​

  • 型: Record<'jsdom' | string, unknown>
  • デフォルト: {}

これらのオプションは、現在の environment の setup メソッドに渡されます。デフォルトでは、テスト環境として JSDOM を使用している場合にのみ、JSDOM オプションを設定できます。

environmentMatchGlobs ​

  • 型: [string, EnvironmentName][]
  • デフォルト: []

非推奨

この API は Vitest 3 で非推奨になりました。プロジェクトを使用して異なる設定を定義してください。

ts
export default defineConfig({
  test: {
    environmentMatchGlobs: [ 
      ['./*.jsdom.test.ts', 'jsdom'], 
    ], 
    projects: [ 
      { 
        extends: true, 
        test: { 
          environment: 'jsdom', 
        }, 
      }, 
    ], 
  },
})

グロブに基づいて環境が自動的に割り当てられます。最初の一致が適用されます。

例:

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

export default defineConfig({
  test: {
    environmentMatchGlobs: [
      // tests/dom 内のすべてのテストは jsdom で実行されます
      ['tests/dom/**', 'jsdom'],
      // tests/ 内の .edge.test.ts を持つすべてのテストは edge-runtime で実行されます
      ['**/*.edge.test.ts', 'edge-runtime'],
      // ...
    ],
  },
});

poolMatchGlobs ​

  • 型: [string, 'threads' | 'forks' | 'vmThreads' | 'vmForks' | 'typescript'][]
  • デフォルト: []

非推奨

この API は Vitest 3 で非推奨になりました。プロジェクトを使用して異なる設定を定義してください。

ts
export default defineConfig({
  test: {
    poolMatchGlobs: [ 
      ['./*.threads.test.ts', 'threads'], 
    ], 
    projects: [ 
      { 
        test: { 
          extends: true, 
          pool: 'threads', 
        }, 
      }, 
    ], 
  },
})

グロブに基づいてテストが実行されるプールを自動的に割り当てます。最初の一致が使用されます。

例:

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

export default defineConfig({
  test: {
    poolMatchGlobs: [
      // "worker-specific" ディレクトリ内のすべてのテストは、`--pool=threads` を有効にしたかのようにワーカー内で実行されます。
      ['**/tests/worker-specific/**', 'threads'],
      // "browser" ディレクトリ内のすべてのテストを実際のブラウザで実行します。
      ['**/tests/browser/**', 'browser'],
      // 他のすべてのテストは、他のグロブを指定しない限り、"browser.enabled" および "threads" オプションに基づいて実行されます。
      // ...
    ],
  },
});

update* ​

  • 型: boolean
  • デフォルト: false
  • CLI: -u, --update, --update=false

スナップショットファイルを更新します。これにより、変更されたすべてのスナップショットが更新され、不要なスナップショットが削除されます。

watch* ​

  • 型: boolean
  • デフォルト: !process.env.CI && process.stdin.isTTY
  • CLI: -w, --watch, --watch=false

ウォッチモードを有効にします。

インタラクティブ環境では、--run が明示的に指定されていない限り、これがデフォルトの動作です。

CI または非インタラクティブシェルから実行される場合、「ウォッチ」モードはデフォルトではありませんが、このフラグで明示的に有効にできます。

watchTriggerPatterns 3.2.0+ * ​

  • 型: WatcherTriggerPattern[]

Vitest は、静的および動的な import ステートメントによって構築されるモジュールグラフに基づいてテストを再実行します。ただし、ファイルシステムから読み取ったり、プロキシからフェッチしている場合、Vitest はそれらの依存関係を検出できません。

これらのテストを正しく再実行するには、正規表現パターンと、実行するテストファイルのリストを返す関数を定義できます。

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

export default defineConfig({
  test: {
    watchTriggerPatterns: [
      {
        pattern: /^src\/(mailers|templates)\/(.*)\.(ts|html|txt)$/,
        testToRun: (id, match) => {
          // root 値からの相対パス
          return `./api/tests/mailers/${match[2]}.test.ts`;
        },
      },
    ],
  },
});

WARNING

返されるファイルは、絶対パスまたはルートからの相対パスである必要があります。これはグローバルオプションであり、プロジェクト設定内では使用できないことに注意してください。

root ​

  • 型: string
  • CLI: -r <path>, --root=<path>

プロジェクトのルート。

dir ​

  • 型: string
  • CLI: --dir=<path>
  • デフォルト: root と同じ

テストファイルをスキャンするベースディレクトリ。このオプションを指定すると、ルートがプロジェクト全体をカバーしている場合にテスト検出を高速化できます。

reporters* ​

  • 型: Reporter | Reporter[]
  • デフォルト: 'default'
  • CLI: --reporter=<name>, --reporter=<name1> --reporter=<name2>

出力用のカスタムレポーター。レポーターは、レポーターインスタンス、組み込みレポーターを選択するための文字列、またはカスタム実装へのパス(例: './path/to/reporter.ts'、'@scope/reporter')です。

outputFile* ​

  • 型: string | Record<string, string>
  • CLI: --outputFile=<path>, --outputFile.json=./path

--reporter=json、--reporter=html、または --reporter=junit オプションも指定されている場合に、テスト結果をファイルに書き込みます。 文字列の代わりにオブジェクトを提供することで、複数のレポーターを使用する場合に個別の出力を定義できます。

pool* ​

  • 型: 'threads' | 'forks' | 'vmThreads' | 'vmForks'
  • デフォルト: 'forks'
  • CLI: --pool=threads

テストを実行するために使用されるプール。

threads* ​

tinypool(Piscina の軽量フォーク)を使用したマルチスレッドを有効にします。スレッドを使用する場合、process.chdir() などのプロセス関連の API を使用できません。Prisma、bcrypt、canvas などのネイティブ言語で書かれた一部のライブラリは、複数のスレッドで実行すると問題が発生し、セグメンテーション違反が発生します。これらの場合、代わりに forks プールを使用することをお勧めします。

forks* ​

threads プールと同様ですが、tinypool を介して worker_threads の代わりに child_process を使用します。テストとメインプロセス間の通信は threads プールほど高速ではありません。process.chdir() などのプロセス関連の API は forks プールで利用できます。

vmThreads* ​

threads プールで VM コンテキスト(サンドボックス環境内)を使用してテストを実行します。

これによりテストの実行が高速化されますが、VM モジュールは ESM コードの実行時に不安定です。テストはメモリリークを起こします。これを解決するには、poolOptions.vmThreads.memoryLimit の値を手動で編集することを検討してください。

WARNING

サンドボックスでコードを実行することにはいくつかの利点(テストの高速化)がありますが、いくつかの欠点も伴います。

  • ネイティブモジュール(fs、path など)内のグローバルは、テスト環境に存在するグローバルとは異なります。結果として、これらのネイティブモジュールによってスローされたエラーは、コードで使用されているものとは異なる Error コンストラクタを参照します。
ts
try {
  fs.writeFileSync('/doesnt exist');
} catch (err) {
  console.log(err instanceof Error); // false
}
  • ES モジュールのインポートはそれらを無期限にキャッシュするため、多くのコンテキスト(テストファイル)がある場合にメモリリークが発生します。Node.js にはそのキャッシュをクリアする API がありません。
  • サンドボックス環境では、グローバルへのアクセスに時間がかかります。

このオプションを使用する際は、これらの問題に注意してください。Vitest チームは、これらの問題のいずれも私たちの側で修正することはできません。

vmForks* ​

vmThreads プールと同様ですが、tinypool を介して worker_threads の代わりに child_process を使用します。テストとメインプロセス間の通信は vmThreads プールほど高速ではありません。process.chdir() などのプロセス関連の API は vmForks プールで利用できます。このプールには vmThreads にリストされているのと同じ落とし穴があることに注意してください。

poolOptions* ​

  • 型: Record<'threads' | 'forks' | 'vmThreads' | 'vmForks', {}>
  • デフォルト: {}

poolOptions.threads ​

threads プールのオプション。

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

export default defineConfig({
  test: {
    poolOptions: {
      threads: {
        // ここにスレッド関連のオプション
      },
    },
  },
});
poolOptions.threads.maxThreads* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

スレッドの最大数または割合。VITEST_MAX_THREADS 環境変数も使用できます。

poolOptions.threads.minThreads* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

スレッドの最小数または割合。VITEST_MIN_THREADS 環境変数も使用できます。

poolOptions.threads.singleThread ​
  • 型: boolean
  • デフォルト: false

同じ環境を持つすべてのテストを単一のワーカー スレッド内で実行します。これにより、組み込みのモジュール分離が無効になります(ソースコードまたはインライン化されたコードは各テストで再評価されます)が、テストのパフォーマンスが向上する可能性があります。

WARNING

このオプションはテストを順次実行するように強制しますが、Jest の --runInBand とは異なります。Vitest は、テストを並行して実行するだけでなく、分離を提供するためにもワーカーを使用します。このオプションを無効にすると、テストは順次実行されますが、同じグローバルコンテキストで実行されるため、自分で分離を提供する必要があります。

これは、グローバル状態に依存している場合(フロントエンドフレームワークは通常そうします)や、コードが各テストで個別に定義される環境に依存している場合に、あらゆる種類の問題を引き起こす可能性があります。しかし、グローバル状態に必ずしも依存しない、または簡単に回避できるテストの場合、テストの速度を向上させる(最大3倍高速化)ことができます。

poolOptions.threads.useAtomics* ​
  • 型: boolean
  • デフォルト: false

スレッドを同期するために Atomics を使用します。

これにより、場合によってはパフォーマンスが向上しますが、古い Node バージョンではセグメンテーション違反が発生する可能性があります。

poolOptions.threads.isolate ​
  • Type: boolean
  • Default: true

各テストファイルに対して環境を隔離します。

poolOptions.threads.execArgv* ​
  • 型: string[]
  • デフォルト: []

スレッド内の node に追加の引数を渡します。詳細については、Command-line API | Node.js を参照してください。

WARNING

使用には注意してください。一部のオプション(例: --prof, --title)はワーカーをクラッシュさせる可能性があります。https://github.com/nodejs/node/issues/41103 を参照してください。

poolOptions.forks ​

forks プールのオプション。

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

export default defineConfig({
  test: {
    poolOptions: {
      forks: {
        // ここにフォーク関連のオプション
      },
    },
  },
});
poolOptions.forks.maxForks* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

フォークの最大数または割合。VITEST_MAX_FORKS 環境変数も使用できます。

poolOptions.forks.minForks* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

フォークの最小数または割合。VITEST_MIN_FORKS 環境変数も使用できます。

poolOptions.forks.isolate ​
  • 型: boolean
  • デフォルト: true

各テストファイルに対して環境を分離します。

poolOptions.forks.singleFork ​
  • 型: boolean
  • デフォルト: false

同じ環境を持つすべてのテストを単一の子プロセス内で実行します。これにより、組み込みのモジュール分離が無効になります(ソースコードまたはインライン化されたコードは各テストで再評価されます)が、テストのパフォーマンスが向上する可能性があります。

WARNING

このオプションはテストを順次実行するように強制しますが、Jest の --runInBand とは異なります。Vitest は、テストを並行して実行するだけでなく、分離を提供するためにも子プロセスを使用します。このオプションを無効にすると、テストは順次実行されますが、同じグローバルコンテキストで実行されるため、自分で分離を提供する必要があります。

これは、グローバル状態に依存している場合(フロントエンドフレームワークは通常そうします)や、コードが各テストで個別に定義される環境に依存している場合に、あらゆる種類の問題を引き起こす可能性があります。しかし、グローバル状態に必ずしも依存しない、または簡単に回避できるテストの場合、テストの速度を向上させる(最大3倍高速化)ことができます。

poolOptions.forks.execArgv* ​
  • 型: string[]
  • デフォルト: []

子プロセス内の node プロセスに追加の引数を渡します。詳細については、Command-line API | Node.js を参照してください。

WARNING

使用には注意してください。一部のオプション(例: --prof, --title)はワーカーをクラッシュさせる可能性があります。https://github.com/nodejs/node/issues/41103 を参照してください。

poolOptions.vmThreads ​

vmThreads プールのオプション。

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

export default defineConfig({
  test: {
    poolOptions: {
      vmThreads: {
        // ここに VM スレッド関連のオプション
      },
    },
  },
});
poolOptions.vmThreads.maxThreads* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

スレッドの最大数または割合。VITEST_MAX_THREADS 環境変数も使用できます。

poolOptions.vmThreads.minThreads* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

スレッドの最小数または割合。VITEST_MIN_THREADS 環境変数も使用できます。

poolOptions.vmThreads.memoryLimit* ​
  • 型: string | number
  • デフォルト: 1 / CPU Cores

ワーカーがリサイクルされるまでのメモリ制限を指定します。この値は環境に大きく依存するため、デフォルトに頼るのではなく手動で指定することをお勧めします。

TIP

実装は Jest の workerIdleMemoryLimit に基づいています。

制限はさまざまな方法で指定でき、結果がどうであれ Math.floor を使用して整数値に変換されます。

  • <= 1 - 値はシステムメモリの割合と見なされます。したがって、0.5 はワーカーのメモリ制限をシステムメモリ全体の半分に設定します。
  • > 1 - 固定バイト値と見なされます。前のルールのため、1バイトの値が必要な場合(理由は不明ですが)は1.1を使用できます。
  • 単位付き
    • 50% - 上記と同様、システムメモリ全体の割合
    • 100KB、65MB など - 固定メモリ制限を示す単位付き。
      • K / KB - キロバイト (x1000)
      • KiB - キビバイト (x1024)
      • M / MB - メガバイト - MiB - メビバイト
      • G / GB - ギガバイト - GiB - ギビバイト

WARNING

パーセンテージベースのメモリ制限は、誤ったシステムメモリが報告されるため、Linux CircleCI ワーカーでは機能しません。

poolOptions.vmThreads.useAtomics* ​
  • 型: boolean
  • デフォルト: false

スレッドを同期するために Atomics を使用します。

これにより、場合によってはパフォーマンスが向上しますが、古い Node バージョンではセグメンテーション違反が発生する可能性があります。

poolOptions.vmThreads.execArgv* ​
  • 型: string[]
  • デフォルト: []

VM コンテキスト内の node プロセスに追加の引数を渡します。詳細については、Command-line API | Node.js を参照してください。

WARNING

使用には注意してください。一部のオプション(例: --prof, --title)はワーカーをクラッシュさせる可能性があります。https://github.com/nodejs/node/issues/41103 を参照してください。

poolOptions.vmForks ​

vmForks プールのオプション。

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

export default defineConfig({
  test: {
    poolOptions: {
      vmForks: {
        // ここに VM フォーク関連のオプション
      },
    },
  },
});
poolOptions.vmForks.maxForks* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

フォークの最大数または割合。VITEST_MAX_FORKS 環境変数も使用できます。

poolOptions.vmForks.minForks* ​
  • 型: number | string
  • デフォルト: 利用可能な CPU 数

フォークの最小数または割合。VITEST_MIN_FORKS 環境変数も使用できます。

poolOptions.vmForks.memoryLimit* ​
  • 型: string | number
  • デフォルト: 1 / CPU Cores

ワーカーがリサイクルされるまでのメモリ制限を指定します。この値は環境に大きく依存するため、デフォルトに頼るのではなく手動で指定することをお勧めします。値の計算方法は poolOptions.vmThreads.memoryLimit で説明されています。

poolOptions.vmForks.execArgv* ​
  • 型: string[]
  • デフォルト: []

VM コンテキスト内の node プロセスに追加の引数を渡します。詳細については、Command-line API | Node.js を参照してください。

WARNING

使用には注意してください。一部のオプション(例: --prof, --title)はワーカーをクラッシュさせる可能性があります。https://github.com/nodejs/node/issues/41103 を参照してください。

fileParallelism* ​

  • 型: boolean
  • デフォルト: true
  • CLI: --no-file-parallelism, --fileParallelism=false

すべてのテストファイルを並行して実行すべきか。これを false に設定すると、maxWorkers と minWorkers オプションが 1 に上書きされます。

TIP

このオプションは、同じファイル内で実行されるテストには影響しません。それらを並行して実行したい場合は、describe または設定で concurrent オプションを使用してください。

maxWorkers* ​

  • 型: number | string

テストを実行するワーカーの最大数、または全ワーカーに対する割合。poolOptions.{threads,vmThreads}.maxThreads/poolOptions.forks.maxForks の方が優先度が高いです。

minWorkers* ​

  • 型: number | string

テストを実行するワーカーの最小数、または全ワーカーに対する割合。poolOptions.{threads,vmThreads}.minThreads/poolOptions.forks.minForks の方が優先度が高いです。

testTimeout ​

  • 型: number
  • デフォルト: Node.js では 5_000、browser.enabled が true の場合は 15_000
  • CLI: --test-timeout=5000, --testTimeout=5000

テストのデフォルトのタイムアウト(ミリ秒単位)。タイムアウトを完全に無効にするには 0 を使用してください。

hookTimeout ​

  • 型: number
  • デフォルト: Node.js では 10_000、browser.enabled が true の場合は 30_000
  • CLI: --hook-timeout=10000, --hookTimeout=10000

フックのデフォルトのタイムアウト(ミリ秒単位)。タイムアウトを完全に無効にするには 0 を使用してください。

teardownTimeout* ​

  • 型: number
  • デフォルト: 10000
  • CLI: --teardown-timeout=5000, --teardownTimeout=5000

Vitest がシャットダウンする際にクローズを待つデフォルトのタイムアウト(ミリ秒単位)。

silent* ​

  • 型: boolean | 'passed-only'
  • デフォルト: false
  • CLI: --silent, --silent=false

テストからのコンソール出力を抑制します。

失敗したテストからのログのみを表示するには 'passed-only' を使用します。失敗したテストからのログは、テストが終了した後に表示されます。

setupFiles ​

  • 型: string | string[]

セットアップファイルへのパス。これらのファイルは各テストファイルの前に実行されます。

INFO

セットアップファイルを編集すると、すべてのテストが自動的に再実行されます。

process.env.VITEST_POOL_ID(数値形式の文字列)を使用してスレッドを区別することが可能です。

TIP

--isolate=false で実行している場合、このセットアップファイルは同じグローバルスコープで複数回実行されることに注意してください。つまり、各テストの前に同じグローバルオブジェクトにアクセスすることになるため、重複した処理を行わないように注意してください。

たとえば、グローバル変数に依存する場合があります。

ts
import { config } from '@some-testing-lib';

if (!globalThis.defined) {
  config.plugins = [myCoolPlugin];
  computeHeavyThing();
  globalThis.defined = true;
}

// フックは各スイートの前にリセットされます
afterEach(() => {
  cleanup();
});

globalThis.resetBeforeEachTest = true;

provide 2.1.0+ ​

  • 型: Partial<ProvidedContext>

inject メソッドを使用してテスト内でアクセスできる値を定義できます。

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

export default defineConfig({
  test: {
    provide: {
      API_KEY: '123',
    },
  },
});
ts
import { expect, inject, test } from 'vitest';

test('api key is defined', () => {
  expect(inject('API_KEY')).toBe('123');
});

WARNING

プロパティは文字列である必要があり、値はシリアライズ可能である必要があります。これは、このオブジェクトが異なるプロセス間で転送されるためです。

TIP

TypeScript を使用している場合、型安全なアクセスには ProvidedContext 型を拡張する必要があります。

ts
declare module 'vitest' {
  export interface ProvidedContext {
    API_KEY: string;
  }
}

// 拡張が正しく機能するように、このファイルをモジュールとしてマークします
export {};

globalSetup ​

  • 型: string | string[]

プロジェクトルートからの相対パスで、グローバルセットアップファイルへのパス。

グローバルセットアップファイルは、setup および teardown という名前の関数をエクスポートするか、ティアダウン関数を返す default 関数をエクスポートします(例)。

INFO

複数の globalSetup ファイルが可能です。setup と teardown は順次実行され、teardown は逆順で実行されます。

WARNING

グローバルセットアップは、少なくとも1つの実行中のテストがある場合にのみ実行されます。これは、ウォッチモード中にテストファイルが変更された後にグローバルセットアップが実行を開始する可能性があります(テストファイルは、実行する前にグローバルセットアップが完了するのを待ちます)。

グローバルセットアップは異なるグローバルスコープで実行されるため、テストはここで定義された変数にアクセスできないことに注意してください。ただし、provide メソッドを介してシリアライズ可能なデータをテストに渡すことができます。

ts
import { inject } from 'vitest';

inject('wsPort') === 3000;
ts
import type { TestProject } from 'vitest/node';

export default function setup(project: TestProject) {
  project.provide('wsPort', 3000);
}

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}
ts
import type { GlobalSetupContext } from 'vitest/node';

export default function setup({ provide }: GlobalSetupContext) {
  provide('wsPort', 3000);
}

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}

Vitest 3 以降、Vitest がテストを再実行するときに呼び出されるカスタムコールバック関数を定義できるようになりました。関数が非同期の場合、ランナーはテストを実行する前に完了するまで待ちます。コンテキストに依存するため、project を { onTestsRerun } のように分割代入できないことに注意してください。

ts
import type { TestProject } from 'vitest/node';

export default function setup(project: TestProject) {
  project.onTestsRerun(async () => {
    await restartDb();
  });
}

forceRerunTriggers* ​

  • 型: string[]
  • デフォルト: ['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']

スイート全体の再実行をトリガーするファイルパスのグロブパターン。--changed 引数と組み合わせると、Git の差分でトリガーが見つかった場合にテストスイート全体が実行されます。

CLI コマンドの呼び出しをテストする場合に便利です。Vite はモジュールグラフを構築できないためです。

ts
test('execute a script', async () => {
  // `dist/index.js` の内容が変更されても Vitest はこのテストを再実行できません
  await execa('node', ['dist/index.js']);
});

TIP

ファイルが server.watch.ignored によって除外されていないことを確認してください。

coverage* ​

カバレッジ収集には、v8、istanbul、またはカスタムカバレッジソリューションを使用できます。

ドット記法で CLI にカバレッジオプションを指定できます。

sh
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all

WARNING

ドット記法でカバレッジオプションを使用する場合、--coverage.enabled を指定することを忘れないでください。その場合、単一の --coverage オプションは指定しないでください。

coverage.provider ​

  • 型: 'v8' | 'istanbul' | 'custom'
  • デフォルト: 'v8'
  • CLI: --coverage.provider=<provider>

カバレッジ収集ツールを選択するために provider を使用します。

coverage.enabled ​

  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.enabled, --coverage.enabled=false

カバレッジ収集を有効にします。--coverage CLI オプションで上書きできます。

coverage.include ​

  • 型: string[]
  • デフォルト: ['**']
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.include=<path>, --coverage.include=<path1> --coverage.include=<path2>

グロブパターンとしてカバレッジに含めるファイルのリスト。

coverage.extension ​

  • 型: string | string[]
  • デフォルト: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.tsx', '.jsx', '.vue', '.svelte', '.marko', '.astro']
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.extension=<extension>, --coverage.extension=<extension1> --coverage.extension=<extension2>

coverage.exclude ​

  • 型: string[]
  • デフォルト:
js
[
  'coverage/**',
  'dist/**',
  '**/node_modules/**',
  '**/[.]**',
  'packages/*/test?(s)/**',
  '**/*.d.ts',
  '**/virtual:*',
  '**/__x00__*',
  '**/\x00*',
  'cypress/**',
  'test?(s)/**',
  'test?(-*).?(c|m)[jt]s?(x)',
  '**/*{.,-}{test,spec,bench,benchmark}?(-d).?(c|m)[jt]s?(x)',
  '**/__tests__/**',
  '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*',
  '**/vitest.{workspace,projects}.[jt]s?(on)',
  '**/.{eslint,mocha,prettier}rc.{?(c|m)js,yml}',
];
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.exclude=<path>, --coverage.exclude=<path1> --coverage.exclude=<path2>

グロブパターンとしてカバレッジから除外されるファイルのリスト。

このオプションは、すべてのデフォルトオプションを上書きします。無視する新しいパターンを追加する場合は、デフォルトオプションを拡張してください。

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

export default defineConfig({
  test: {
    coverage: {
      exclude: ['**/custom-pattern/**', ...coverageConfigDefaults.exclude],
    },
  },
});

注

Vitest は、テストファイルの include パターンを coverage.exclude に自動的に追加します。 テストファイルのカバレッジを表示することはできません。

coverage.all ​

  • 型: boolean
  • デフォルト: true
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.all, --coverage.all=false

テストされていないファイルを含むすべてのファイルをレポートに含めるかどうかの設定。

coverage.clean ​

  • 型: boolean
  • デフォルト: true
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.clean, --coverage.clean=false

テスト実行前にカバレッジ結果をクリーンアップします。

coverage.cleanOnRerun ​

  • 型: boolean
  • デフォルト: true
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.cleanOnRerun, --coverage.cleanOnRerun=false

ウォッチ再実行時にカバレッジレポートをクリーンアップします。ウォッチモードで以前の実行のカバレッジ結果を保持するには false に設定してください。

coverage.reportsDirectory ​

  • 型: string
  • デフォルト: './coverage'
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.reportsDirectory=<path>

WARNING

coverage.clean が有効になっている場合(デフォルト値)、Vitest はテストを実行する前にこのディレクトリを削除します。

カバレッジレポートの出力先ディレクトリ。

HTML レポーターの出力でカバレッジレポートをプレビューするには、このオプションを HTML レポートディレクトリのサブディレクトリとして設定する必要があります(例: ./html/coverage)。

coverage.reporter ​

  • 型: string | string[] | [string, {}][]
  • デフォルト: ['text', 'html', 'clover', 'json']
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.reporter=<reporter>, --coverage.reporter=<reporter1> --coverage.reporter=<reporter2>

使用するカバレッジレポーターの設定。すべてのレポーターの詳細なリストについては、istanbul ドキュメントを参照してください。レポーター固有のオプションの詳細については、@types/istanbul-reporter を参照してください。

レポーターには3つの異なるタイプがあります。

  • 単一のレポーター: { reporter: 'html' }
  • オプションなしの複数のレポーター: { reporter: ['html', 'json'] }
  • レポーターオプション付きの単一または複数のレポーター:
    ts
    {
      reporter: [
        ['lcov', { projectRoot: './src' }],
        ['json', { file: 'coverage.json' }],
        ['text'],
      ];
    }

カスタムカバレッジレポーターを渡すことも可能です。詳細については、ガイド - カスタムカバレッジレポーターを参照してください。

ts
{
  reporter: [
    // NPM パッケージ名でレポーターを指定
    '@vitest/custom-coverage-reporter',
    ['@vitest/custom-coverage-reporter', { someOption: true }],

    // ローカルパスでレポーターを指定
    '/absolute/path/to/custom-reporter.cjs',
    ['/absolute/path/to/custom-reporter.cjs', { someOption: true }],
  ];
}

Vitest UI でカバレッジレポートを確認できます。詳細については、Vitest UI カバレッジを参照してください。

coverage.reportOnFailure ​

  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.reportOnFailure, --coverage.reportOnFailure=false

テストが失敗した場合でもカバレッジレポートを生成します。

coverage.allowExternal ​

  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.allowExternal, --coverage.allowExternal=false

プロジェクト root 外のファイルのカバレッジを収集します。

coverage.excludeAfterRemap 2.1.0+ ​

  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.excludeAfterRemap, --coverage.excludeAfterRemap=false

カバレッジが元のソースに再マッピングされた後、再度除外を適用します。 これは、ソースファイルがトランスパイルされ、非ソースファイルのソースマップが含まれている場合に便利です。

coverage.exclude パターンに一致するにもかかわらず、レポートにファイルが表示される場合にこのオプションを使用してください。

coverage.skipFull ​

  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.skipFull, --coverage.skipFull=false

ステートメント、ブランチ、関数カバレッジが100%のファイルを表示しません。

coverage.thresholds ​

カバレッジしきい値のオプション。

しきい値が正の数に設定されている場合、それは必要なカバレッジの最小パーセンテージとして解釈されます。たとえば、行のしきい値を 90 に設定すると、90% の行がカバーされている必要があります。

しきい値が負の数に設定されている場合、それは許可される未カバー項目の最大数として扱われます。たとえば、行のしきい値を -10 に設定すると、未カバーの行は10行以下である必要があります。

ts
{
  coverage: {
    thresholds: {
      // 90% の関数カバレッジを要求
      functions: 90,

      // 未カバーの行が10行以下であることを要求
      lines: -10,
    }
  }
}
coverage.thresholds.lines ​
  • 型: number
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.lines=<number>

行のグローバルしきい値の設定。

coverage.thresholds.functions ​
  • 型: number
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.functions=<number>

関数のグローバルしきい値の設定。

coverage.thresholds.branches ​
  • 型: number
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.branches=<number>

ブランチのグローバルしきい値の設定。

coverage.thresholds.statements ​
  • 型: number
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.statements=<number>

ステートメントのグローバルしきい値の設定。

coverage.thresholds.perFile ​
  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.perFile, --coverage.thresholds.perFile=false

ファイルごとのしきい値をチェックします。

coverage.thresholds.autoUpdate ​
  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.autoUpdate=<boolean>

現在のカバレッジが設定されたしきい値よりも優れている場合に、lines、functions、branches、statements のすべてのしきい値を設定ファイルに更新します。 このオプションは、カバレッジが改善されたときにしきい値を維持するのに役立ちます。

coverage.thresholds.100 ​
  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.100, --coverage.thresholds.100=false

グローバルしきい値を100に設定します。 --coverage.thresholds.lines 100 --coverage.thresholds.functions 100 --coverage.thresholds.branches 100 --coverage.thresholds.statements 100 のショートカットです。

coverage.thresholds[glob-pattern] ​
  • 型: { statements?: number functions?: number branches?: number lines?: number }
  • デフォルト: undefined
  • 利用可能なプロバイダー: 'v8' | 'istanbul'

グロブパターンに一致するファイルのしきい値を設定します。

注

Vitest は、グロブパターンでカバーされるファイルを含むすべてのファイルをグローバルカバレッジしきい値にカウントします。 これは Jest の動作とは異なります。

ts
{
  coverage: {
    thresholds: {
      // すべてのファイルのしきい値
      functions: 95,
      branches: 70,

      // グロブパターンに一致するファイルのしきい値
      'src/utils/**.ts': {
        statements: 95,
        functions: 90,
        branches: 85,
        lines: 80,
      },

      // このパターンに一致するファイルは、行のしきい値のみが設定されます。
      // グローバルしきい値は継承されません。
      '**/math.ts': {
        lines: 100,
      }
    }
  }
}
coverage.thresholds[glob-pattern].100 2.1.0+ ​
  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8' | 'istanbul'

グロブパターンに一致するファイルのしきい値を100に設定します。

ts
{
  coverage: {
    thresholds: {
      // すべてのファイルのしきい値
      functions: 95,
      branches: 70,

      // グロブパターンに一致するファイルのしきい値
      'src/utils/**.ts': { 100: true },
      '**/math.ts': { 100: true }
    }
  }
}

coverage.ignoreEmptyLines ​

  • 型: boolean
  • デフォルト: true (v1 では false)
  • 利用可能なプロバイダー: 'v8'
  • CLI: --coverage.ignoreEmptyLines=<boolean>

空行、コメント、その他の非ランタイムコード(例: Typescript 型)を無視します。experimentalAstAwareRemapping: false が必要です。

このオプションは、使用されるコンパイラがトランスパイルされたコードからコメントやその他の非ランタイムコードを削除する場合にのみ機能します。 デフォルトでは、Vite は ESBuild を使用して、.ts、.tsx、.jsx ファイルからコメントと Typescript 型を削除します。

ESBuild を他のファイルにも適用したい場合は、esbuild オプションで定義してください。

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

export default defineConfig({
  esbuild: {
    // コードカバレッジからコメントを削除するために、すべてのファイルを ESBuild でトランスパイルします。
    // `test.coverage.ignoreEmptyLines` が機能するために必要です。
    include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.ts', '**/*.tsx'],
  },
  test: {
    coverage: {
      provider: 'v8',
      ignoreEmptyLines: true,
    },
  },
});

coverage.experimentalAstAwareRemapping ​

  • 型: boolean
  • デフォルト: false
  • 利用可能なプロバイダー: 'v8'
  • CLI: --coverage.experimentalAstAwareRemapping=<boolean>

実験的な AST ベースの解析でカバレッジを再マッピングします。デフォルトモードと比較して、より正確な結果を提供します。

coverage.ignoreClassMethods ​

  • 型: string[]
  • デフォルト: []
  • 利用可能なプロバイダー: 'istanbul'
  • CLI: --coverage.ignoreClassMethods=<method>

カバレッジで無視するクラスメソッド名の配列を設定します。 詳細については、istanbul ドキュメントを参照してください。

coverage.watermarks ​

  • 型:
ts
{
  statements?: [number, number],
  functions?: [number, number],
  branches?: [number, number],
  lines?: [number, number]
}
  • デフォルト:
ts
{
  statements: [50, 80],
  functions: [50, 80],
  branches: [50, 80],
  lines: [50, 80]
}
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.watermarks.statements=50,80, --coverage.watermarks.branches=50,80

ステートメント、行、ブランチ、関数のウォーターマークの設定。詳細については、istanbul ドキュメントを参照してください。

coverage.processingConcurrency ​

  • 型: boolean
  • デフォルト: Math.min(20, os.availableParallelism?.() ?? os.cpus().length)
  • 利用可能なプロバイダー: 'v8' | 'istanbul'
  • CLI: --coverage.processingConcurrency=<number>

カバレッジ結果を処理する際に使用される並行処理の制限の設定。

coverage.customProviderModule ​

  • 型: string
  • 利用可能なプロバイダー: 'custom'
  • CLI: --coverage.customProviderModule=<path or module name>

カスタムカバレッジプロバイダーモジュールのモジュール名またはパスを指定します。詳細については、ガイド - カスタムカバレッジプロバイダーを参照してください。

testNamePattern* ​

  • 型 string | RegExp
  • CLI: -t <pattern>, --testNamePattern=<pattern>, --test-name-pattern=<pattern>

パターンに一致する完全な名前を持つテストを実行します。 このプロパティに OnlyRunThis を追加すると、テスト名に OnlyRunThis という単語が含まれていないテストはスキップされます。

js
import { expect, test } from 'vitest';

// 実行
test('OnlyRunThis', () => {
  expect(true).toBe(true);
});

// スキップ
test('doNotRun', () => {
  expect(true).toBe(true);
});

open* ​

  • 型: boolean
  • デフォルト: !process.env.CI
  • CLI: --open, --open=false

Vitest UI を開きます (WIP)

api ​

  • 型: boolean | number
  • デフォルト: false
  • CLI: --api, --api.port, --api.host, --api.strictPort

ポートをリッスンし、API を提供します。true に設定すると、デフォルトポートは 51204 です。

browser experimental ​

  • デフォルト: { enabled: false }
  • CLI: --browser=<name>, --browser.name=chrome --browser.headless

ブラウザテストを実行するための設定です。"ブラウザ設定リファレンス"の記事を参照してください。

WARNING

これは実験的な機能です。破壊的変更が SemVer に従わない可能性があるため、使用する際は Vitest のバージョンを固定することをお勧めします。

clearMocks ​

  • 型: boolean
  • デフォルト: false

各テストの前にすべてのスパイで .mockClear() を呼び出します。 これにより、モックの実装に影響を与えることなく、モック履歴がクリアされます。

mockReset ​

  • 型: boolean
  • デフォルト: false

各テストの前にすべてのスパイで .mockReset() を呼び出します。 これにより、モック履歴がクリアされ、各実装が元の状態にリセットされます。

restoreMocks ​

  • 型: boolean
  • デフォルト: false

各テストの前にすべてのスパイで .mockRestore() を呼び出します。 これにより、モック履歴がクリアされ、各実装が元の状態に復元され、スパイされたオブジェクトの元のディスクリプタが復元されます。

unstubEnvs ​

  • 型: boolean
  • デフォルト: false

各テストの前に vi.unstubAllEnvs を呼び出します。

unstubGlobals ​

  • 型: boolean
  • デフォルト: false

各テストの前に vi.unstubAllGlobals を呼び出します。

testTransformMode ​

  • 型: { web?, ssr? }

グロブパターンに一致するテスト内でインポートされたすべてのモジュールの変換方法を決定します。デフォルトでは、環境に依存します。たとえば、JSDOM 環境のテストは ssr: false フラグですべてのファイルを処理し、Node 環境のテストは ssr: true ですべてのモジュールを処理します。

testTransformMode.ssr ​

  • 型: string[]
  • デフォルト: []

指定されたテスト内のすべてのモジュールに SSR 変換パイプラインを使用します。
Vite プラグインは、これらのファイルを処理する際に ssr: true フラグを受け取ります。

testTransformMode.web ​

  • 型: string[]
  • デフォルト: []

まず通常の変換パイプライン(ブラウザをターゲットとする)を実行し、次に Node でコードを実行するために SSR リライトを実行します。
Vite プラグインは、これらのファイルを処理する際に ssr: false フラグを受け取ります。

snapshotFormat* ​

  • 型: PrettyFormatOptions

スナップショットテストのフォーマットオプションの設定。これらのオプションは pretty-format に渡されます。

TIP

このオブジェクトの plugins フィールドは無視されます。

pretty-format プラグインを介してスナップショットシリアライザーを拡張する必要がある場合は、expect.addSnapshotSerializer API または snapshotSerializers オプションを使用してください。

snapshotSerializers* ​

  • 型: string[]
  • デフォルト: []

スナップショットテスト用のスナップショットシリアライザーモジュールへのパスのリストの設定。カスタムスナップショットシリアライザーを追加したい場合に便利です。詳細については、カスタムシリアライザーを参照してください。

resolveSnapshotPath* ​

  • 型: (testPath: string, snapExtension: string, context: { config: SerializedConfig }) => string
  • デフォルト: スナップショットファイルを __snapshots__ ディレクトリに保存します。

デフォルトのスナップショットパスを上書きします。たとえば、スナップショットをテストファイルの隣に保存するには:

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

export default defineConfig({
  test: {
    resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension,
  },
});

allowOnly ​

  • 型: boolean
  • デフォルト: !process.env.CI
  • CLI: --allowOnly, --allowOnly=false

only とマークされたテストとスイートを許可します。

dangerouslyIgnoreUnhandledErrors* ​

  • 型: boolean
  • デフォルト: false
  • CLI: --dangerouslyIgnoreUnhandledErrors --dangerouslyIgnoreUnhandledErrors=false

発生した未処理のエラーを無視します。

passWithNoTests* ​

  • 型: boolean
  • デフォルト: false
  • CLI: --passWithNoTests, --passWithNoTests=false

テストが見つからなくても Vitest は失敗しません。

logHeapUsage ​

  • 型: boolean
  • デフォルト: false
  • CLI: --logHeapUsage, --logHeapUsage=false

各テスト後にヒープ使用量を表示します。メモリリークのデバッグに役立ちます。

css ​

  • 型: boolean | { include?, exclude?, modules? }

CSS を処理するかどうかを設定します。除外された場合、CSS ファイルは後続の処理をバイパスするために空の文字列に置き換えられます。CSS モジュールは、ランタイムに影響を与えないようにプロキシを返します。

css.include ​

  • 型: RegExp | RegExp[]
  • デフォルト: []

実際の CSS を返し、Vite パイプラインによって処理されるファイルの正規表現パターンの設定。

TIP

すべての CSS ファイルを処理するには、/.+/ を使用します。

css.exclude ​

  • 型: RegExp | RegExp[]
  • デフォルト: []

空の CSS ファイルを返すファイルの正規表現パターンの設定。

css.modules ​

  • 型: { classNameStrategy? }
  • デフォルト: {}

css.modules.classNameStrategy ​

  • 型: 'stable' | 'scoped' | 'non-scoped'
  • デフォルト: 'stable'

CSS ファイルを処理することにした場合、CSS モジュール内のクラス名をスコープ化するかどうかを設定できます。次のオプションのいずれかを選択できます。

  • stable: クラス名は _${name}_${hashedFilename} として生成されます。これは、CSS の内容が変更されても生成されたクラスは同じままであるが、ファイル名が変更されたり、ファイルが別のフォルダーに移動されたりすると変更されることを意味します。この設定は、スナップショット機能を使用する場合に便利です。
  • scoped: クラス名は通常通り生成され、css.modules.generateScopedName メソッドがある場合はそれが尊重され、CSS 処理が有効になります。デフォルトでは、ファイル名は _${name}_${hash} として生成され、ハッシュにはファイル名とファイルの内容が含まれます。
  • non-scoped: クラス名はハッシュ化されません。

WARNING

デフォルトでは、Vitest はプロキシをエクスポートし、CSS モジュールの処理をバイパスします。クラスの CSS プロパティに依存している場合は、include オプションを使用して CSS 処理を有効にする必要があります。

maxConcurrency ​

  • 型: number
  • デフォルト: 5
  • CLI: --max-concurrency=10, --maxConcurrency=10

test.concurrent でマークされた、同時に実行できるテストの数の設定。

この制限を超えるテストは、利用可能なスロットが現れるまでキューに入れられます。

cache* ​

  • 型: false
  • CLI: --no-cache, --cache=false

キャッシュ機能を無効にしたい場合は、このオプションを使用してください。現在、Vitest はテスト結果のキャッシュを保存し、より長く失敗したテストを最初に実行します。

キャッシュディレクトリは Vite の cacheDir オプションによって制御されます。

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

export default defineConfig({
  cacheDir: 'custom-folder/.vitest',
});

process.env.VITEST を使用して、Vitest のみにディレクトリを制限することが可能です。

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

export default defineConfig({
  cacheDir: process.env.VITEST ? 'custom-folder/.vitest' : undefined,
});

sequence ​

  • 型: { sequencer?, shuffle?, seed?, hooks?, setupFiles?, groupOrder }

テストのソート方法に関するオプションの設定。

ドット記法で CLI にシーケンスオプションを指定できます。

sh
npx vitest --sequence.shuffle --sequence.seed=1000

sequence.sequencer* ​

  • 型: TestSequencerConstructor
  • デフォルト: BaseSequencer

シャーディングとソートのメソッドを定義するためのカスタムクラス。sort メソッドと shard メソッドのいずれかだけを再定義する必要がある場合は、vitest/node から BaseSequencer を拡張できますが、両方が存在する必要があります。

シャーディングはソートの前に発生し、--shard オプションが提供されている場合にのみ発生します。

sequencer.groupOrder が指定されている場合、シーケンサーは各グループとプールに対して1回呼び出されます。

groupOrder 3.2.0+ ​

  • 型: number
  • デフォルト: 0

複数のプロジェクトを使用する際に、このプロジェクトがテストを実行する順序を制御します。

  • 同じグループ順序番号を持つプロジェクトは一緒に実行され、グループは低い順から高い順に実行されます。
  • このオプションを設定しない場合、すべてのプロジェクトは並行して実行されます。
  • 複数のプロジェクトが同じグループ順序を使用する場合、それらは同時に実行されます。

この設定は、プロジェクト内のテストの順序ではなく、プロジェクトが実行される順序にのみ影響します。 テストの分離またはプロジェクト内のテストの順序を制御するには、isolate および sequence.sequencer オプションを使用してください。

例

この例を考えてみましょう。

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

export default defineConfig({
  test: {
    projects: [
      {
        test: {
          name: 'slow',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'fast',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'flaky',
          sequence: {
            groupOrder: 1,
          },
        },
      },
    ],
  },
});

これらのプロジェクトのテストは、次の順序で実行されます。

 0. slow  |
          |> 一緒に実行
 0. fast  |

 1. flaky |> slow と fast の後に単独で実行

sequence.shuffle ​

  • 型: boolean | { files?, tests? }
  • デフォルト: false
  • CLI: --sequence.shuffle, --sequence.shuffle=false

ファイルとテストをランダムに実行したい場合は、このオプションまたは CLI 引数 --sequence.shuffle で有効にできます。

Vitest は通常、キャッシュを使用してテストをソートするため、実行時間の長いテストが早く開始されます。これにより、テストの実行が高速化されます。ファイルとテストがランダムな順序で実行される場合、このパフォーマンス向上は失われますが、以前に実行された別のテストに偶然依存するテストを追跡するのに役立つ場合があります。

sequence.shuffle.files ​

  • 型: boolean
  • デフォルト: false
  • CLI: --sequence.shuffle.files, --sequence.shuffle.files=false

ファイルをランダム化するかどうかの設定。このオプションを有効にすると、実行時間の長いテストが早く開始されないことに注意してください。

sequence.shuffle.tests ​

  • 型: boolean
  • デフォルト: false
  • CLI: --sequence.shuffle.tests, --sequence.shuffle.tests=false

テストをランダム化するかどうかの設定。

sequence.concurrent ​

  • 型: boolean
  • デフォルト: false
  • CLI: --sequence.concurrent, --sequence.concurrent=false

テストを並行して実行したい場合は、このオプションまたは CLI 引数 --sequence.concurrent で有効にできます。

sequence.seed* ​

  • 型: number
  • デフォルト: Date.now()
  • CLI: --sequence.seed=1000

テストがランダムな順序で実行されている場合、ランダム化シードを設定します。

sequence.hooks ​

  • 型: 'stack' | 'list' | 'parallel'
  • デフォルト: 'stack'
  • CLI: --sequence.hooks=<value>

フックが実行される順序を変更します。

  • stack は "after" フックを逆順に、"before" フックは定義された順序で実行します。
  • list はすべてのフックを定義された順序で実行します。
  • parallel は単一グループ内のフックを並行して実行します(親スイートのフックは現在のスイートのフックの前に実行されます)。

TIP

このオプションは onTestFinished には影響しません。これは常に逆順で呼び出されます。

sequence.setupFiles ​

  • 型: 'list' | 'parallel'
  • デフォルト: 'parallel'
  • CLI: --sequence.setupFiles=<value>

セットアップファイルが実行される順序を変更します。

  • list はセットアップファイルを定義された順序で実行します。
  • parallel はセットアップファイルを並行して実行します。

typecheck ​

型チェックテスト環境を設定するためのオプションの設定。

typecheck.enabled ​

  • 型: boolean
  • デフォルト: false
  • CLI: --typecheck, --typecheck.enabled

通常のテストと並行して型チェックを有効にします。

typecheck.only ​

  • 型: boolean
  • デフォルト: false
  • CLI: --typecheck.only

型チェックが有効な場合、型チェックテストのみを実行します。CLI を使用する場合、このオプションは自動的に型チェックを有効にします。

typecheck.checker ​

  • 型: 'tsc' | 'vue-tsc' | string
  • デフォルト: tsc

型チェックに使用するツールの設定。Vitest は、型に応じて、より簡単な解析のために特定のパラメータを持つプロセスを生成します。チェッカーは tsc と同じ出力形式を実装する必要があります。

型チェッカーを使用するには、パッケージをインストールする必要があります。

  • tsc には typescript パッケージが必要です。
  • vue-tsc には vue-tsc パッケージが必要です。

tsc --noEmit --pretty false と同じ出力を生成するカスタムバイナリまたはコマンド名へのパスを渡すことも可能です。

typecheck.include ​

  • 型: string[]
  • デフォルト: ['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']

テストファイルとして扱われるべきファイルのグロブパターンの設定。

typecheck.exclude ​

  • 型: string[]
  • デフォルト: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']

テストファイルとして扱われるべきではないファイルのグロブパターンの設定。

typecheck.allowJs ​

  • 型: boolean
  • デフォルト: false

@ts-check コメントを持つ JS ファイルをチェックします。tsconfig で有効になっている場合、これは上書きされません。

typecheck.ignoreSourceErrors ​

  • 型: boolean
  • デフォルト: false

テストファイル外でエラーが見つかっても Vitest を失敗させません。これにより、非テストエラーはまったく表示されません。

デフォルトでは、Vitest がソースエラーを見つけると、テストスイートは失敗します。

typecheck.tsconfig ​

  • 型: string
  • デフォルト: 最も近い tsconfig.json を探します

プロジェクトルートからの相対パスで、カスタム tsconfig へのパスの設定。

typecheck.spawnTimeout ​

  • 型: number
  • デフォルト: 10_000

型チェッカーを生成するのにかかる最小時間(ミリ秒単位)。

slowTestThreshold* ​

  • 型: number
  • デフォルト: 300
  • CLI: --slow-test-threshold=<number>, --slowTestThreshold=<number>

テストまたはスイートが遅いと見なされ、結果にそのように報告されるまでのミリ秒数。

chaiConfig ​

  • 型: { includeStack?, showDiff?, truncateThreshold? }
  • デフォルト: { includeStack: false, showDiff: true, truncateThreshold: 40 }

Chai config と同等です。

chaiConfig.includeStack ​

  • 型: boolean
  • デフォルト: false

Assertion エラーメッセージにスタックトレースを含めるかどうかに影響します。デフォルトの false は、エラーメッセージのスタックトレースを抑制します。

chaiConfig.showDiff ​

  • 型: boolean
  • デフォルト: true

スローされた AssertionErrors に showDiff フラグを含めるかどうかに影響します。false は常に false です。true は、アサーションが差分を表示するように要求した場合に true になります。

chaiConfig.truncateThreshold ​

  • 型: number
  • デフォルト: 40

アサーションエラーにおける実際値と期待値の長さのしきい値を設定します。このしきい値を超えると、たとえば大きなデータ構造の場合、値は [ Array(3) ] や { Object (prop1, prop2) } のようなものに置き換えられます。切り捨てを完全に無効にしたい場合は 0 に設定してください。

この設定オプションは、test.each のタイトルとアサーションエラーメッセージ内の値の切り捨てに影響します。

bail ​

  • 型: number
  • デフォルト: 0
  • CLI: --bail=<value>

指定された数のテストが失敗した場合にテスト実行を停止します。

デフォルトでは、Vitest は一部のテストが失敗してもすべてのテストケースを実行します。これは、100% 成功したビルドのみに関心があり、テストの失敗が発生した場合にできるだけ早くテスト実行を停止したい CI ビルドでは望ましくない場合があります。bail オプションを使用すると、失敗が発生した場合にそれ以上テストを実行しないようにすることで、CI 実行を高速化することが可能です。

retry ​

  • 型: number
  • デフォルト: 0
  • CLI: --retry=<value>

テストが失敗した場合、指定された回数だけ再試行します。

onConsoleLog* ​

  • 型: (log: string, type: 'stdout' | 'stderr') => boolean | void

テストでの console.log のカスタムハンドラーの設定。false を返すと、Vitest はログをコンソールに出力しません。

サードパーティライブラリからのログをフィルタリングするのに役立ちます。

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

export default defineConfig({
  test: {
    onConsoleLog(log: string, type: 'stdout' | 'stderr'): boolean | void {
      return !(log === 'message from third party library' && type === 'stdout');
    },
  },
});

onStackTrace* ​

  • 型: (error: Error, frame: ParsedStack) => boolean | void

エラー処理時に、各スタックトレースの各フレームにフィルタリング関数を適用します。最初の引数 error は、標準の Error と同じプロパティを持つオブジェクトですが、実際のインスタンスではありません。

サードパーティライブラリからのスタックトレースフレームをフィルタリングするのに役立ちます。

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

export default defineConfig({
  test: {
    onStackTrace(error: Error, { file }: ParsedStack): boolean | void {
      // ReferenceError に遭遇した場合、スタック全体を表示します。
      if (error.name === 'ReferenceError') {
        return;
      }

      // サードパーティライブラリからのすべてのフレームを拒否します。
      if (file.includes('node_modules')) {
        return false;
      }
    },
  },
});

diff ​

  • 型: string
  • CLI: --diff=<path>

DiffOptions オブジェクト、または DiffOptions をエクスポートするモジュールへのパスの設定。差分表示をカスタマイズしたい場合に便利です。

たとえば、設定オブジェクトとして:

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

export default defineConfig({
  test: {
    diff: {
      aIndicator: c.bold('--'),
      bIndicator: c.bold('++'),
      omitAnnotationLines: true,
    },
  },
});

またはモジュールとして:

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

export default defineConfig({
  test: {
    diff: './vitest.diff.ts',
  },
});
ts
import type { DiffOptions } from 'vitest';
import c from 'picocolors';

export default {
  aIndicator: c.bold('--'),
  bIndicator: c.bold('++'),
  omitAnnotationLines: true,
} satisfies DiffOptions;

diff.expand ​

  • 型: boolean
  • デフォルト: true
  • CLI: --diff.expand=false

すべての共通行を展開します。

diff.truncateThreshold ​

  • 型: number
  • デフォルト: 0
  • CLI: --diff.truncateThreshold=<path>

表示される差分結果の最大長の設定。このしきい値を超える差分は切り捨てられます。 デフォルト値 0 の場合、切り捨ては行われません。

diff.truncateAnnotation ​

  • 型: string
  • デフォルト: '... Diff result is truncated'
  • CLI: --diff.truncateAnnotation=<annotation>

差分結果が切り捨てられた場合に、その末尾に出力される注釈の設定。

diff.truncateAnnotationColor ​

  • 型: DiffOptionsColor = (arg: string) => string
  • デフォルト: noColor = (string: string): string => string

切り捨て注釈の色の設定。デフォルトは色なしで出力されます。

diff.printBasicPrototype ​

  • 型: boolean
  • デフォルト: false

差分出力で基本的なプロトタイプ Object と Array を出力します。

diff.maxDepth ​

  • 型: number
  • デフォルト: 20 (異なる型を比較する場合は 8)

ネストされたオブジェクトを出力する際に再帰する深さを制限します。

fakeTimers ​

  • 型: FakeTimerInstallOpts

vi.useFakeTimers() を使用する際に Vitest が @sinon/fake-timers に渡すオプションの設定。

fakeTimers.now ​

  • 型: number | Date
  • デフォルト: Date.now()

指定された Unix エポックで偽のタイマーをインストールします。

fakeTimers.toFake ​

  • 型: ('setTimeout' | 'clearTimeout' | 'setImmediate' | 'clearImmediate' | 'setInterval' | 'clearInterval' | 'Date' | 'nextTick' | 'hrtime' | 'requestAnimationFrame' | 'cancelAnimationFrame' | 'requestIdleCallback' | 'cancelIdleCallback' | 'performance' | 'queueMicrotask')[]
  • デフォルト: nextTick と queueMicrotask を除くグローバルで利用可能なすべて

偽装するグローバルメソッドと API の名前の配列の設定。

setTimeout() と nextTick() のみをモックするには、このプロパティを ['setTimeout', 'nextTick'] として指定してください。

nextTick のモックは、--pool=forks を使用して node:child_process 内で Vitest を実行する場合、サポートされていません。NodeJS は node:child_process 内で内部的に process.nextTick を使用し、モックされるとハングします。nextTick のモックは、--pool=threads でVitest を実行する場合にサポートされます。

fakeTimers.loopLimit ​

  • 型: number
  • デフォルト: 10_000

vi.runAllTimers() を呼び出すときに実行されるタイマーの最大数の設定。

fakeTimers.shouldAdvanceTime ​

  • 型: boolean
  • デフォルト: false

@sinonjs/fake-timers に、実際のシステム時間の変化に基づいてモックされた時間を自動的に増分するように指示します(例: 実際のシステム時間の20msの変化ごとに、モックされた時間は20ms増分されます)。

fakeTimers.advanceTimeDelta ​

  • 型: number
  • デフォルト: 20

shouldAdvanceTime: true と一緒に使用する場合にのみ関連します。実際のシステム時間の advanceTimeDelta ミリ秒の変化ごとに、モックされた時間を advanceTimeDelta ミリ秒増分します。

fakeTimers.shouldClearNativeTimers ​

  • 型: boolean
  • デフォルト: true

偽のタイマーに、それぞれのハンドラーに委譲することで「ネイティブ」(つまり偽ではない)タイマーをクリアするように指示します。無効にすると、偽のタイマーセッションを開始する前にタイマーが存在した場合、予期しない動作につながる可能性があります。

workspace* ​

非推奨

このオプションは非推奨であり、次のメジャーバージョンで削除されます。代わりに projects を使用してください。

  • 型: string | TestProjectConfiguration[]
  • CLI: --workspace=./file.js
  • デフォルト: 設定ファイルまたはルートに近い vitest.{workspace,projects}.{js,ts,json}

プロジェクトルートからの相対パスで、ワークスペース設定ファイルへのパスの設定。

Vitest 3 以降、ルート設定でワークスペース配列を定義できるようになりました。設定で workspace が手動で定義されている場合、Vitest はルートの vitest.workspace ファイルを無視します。

projects* ​

  • 型: TestProjectConfiguration[]
  • デフォルト: []

プロジェクトの配列の設定。

isolate ​

  • 型: boolean
  • デフォルト: true
  • CLI: --no-isolate, --isolate=false

テストを分離された環境で実行します。このオプションは vmThreads および vmForks プールには影響しません。

このオプションを無効にすると、コードが副作用に依存しない場合(通常、node 環境のプロジェクトでは当てはまります)、パフォーマンスが向上する可能性があります。

TIP

poolOptions プロパティを使用して、特定のプールでの分離を無効にすることが可能です。

includeTaskLocation ​

  • 型: boolean
  • デフォルト: false

Vitest API がレポーターでタスクを受け取るときに location プロパティを含めるかどうかの設定。テストが多い場合、これによりわずかなパフォーマンス低下が発生する可能性があります。

location プロパティには、元のファイル内の test または describe の位置に対応する column と line の値があります。

このオプションは、明示的に無効にしない限り、Vitest を以下で実行している場合に自動的に有効になります。

  • Vitest UI
  • またはヘッドレスモードなしでブラウザモードを使用している場合
  • またはHTML レポーターを使用している場合

TIP

このオプションは、これに依存するカスタムコードを使用しない限り、効果はありません。

snapshotEnvironment ​

  • 型: string

カスタムスナップショット環境実装へのパスの設定。これは、Node.js API をサポートしない環境でテストを実行している場合に便利です。このオプションはブラウザランナーには影響しません。

このオブジェクトは SnapshotEnvironment の型を持つ必要があり、スナップショットファイルの解決と読み書きに使用されます。

ts
export interface SnapshotEnvironment {
  getVersion: () => string;
  getHeader: () => string;
  resolvePath: (filepath: string) => Promise<string>;
  resolveRawPath: (testPath: string, rawPath: string) => Promise<string>;
  saveSnapshotFile: (filepath: string, snapshot: string) => Promise<void>;
  readSnapshotFile: (filepath: string) => Promise<string | null>;
  removeSnapshotFile: (filepath: string) => Promise<void>;
}

API の一部のみを上書きする必要がある場合は、vitest/snapshot エントリポイントからデフォルトの VitestSnapshotEnvironment を拡張することが可能です。

WARNING

これは低レベルのオプションであり、デフォルトの Node.js API にアクセスできない高度なケースでのみ使用する必要があります。

スナップショット機能を設定する必要があるだけの場合は、snapshotFormat または resolveSnapshotPath オプションを使用してください。

env ​

  • 型: Partial<NodeJS.ProcessEnv>

テスト中に process.env および import.meta.env で利用可能な環境変数の設定。これらの変数はメインプロセス(たとえば globalSetup)では利用できません。

expect ​

  • 型: ExpectOptions

expect.requireAssertions ​

  • 型: boolean
  • デフォルト: false

各テストの開始時に expect.hasAssertions() を呼び出すのと同じです。これにより、テストが誤ってパスしないようにします。

TIP

これは Vitest の expect でのみ機能します。assert または .should アサーションを使用する場合、それらはカウントされず、アサーションの不足によりテストは失敗します。

vi.setConfig({ expect: { requireAssertions: false } }) を呼び出すことで、この値を変更することが可能です。この設定は、vi.resetConfig が手動で呼び出されるまで、その後のすべての expect 呼び出しに適用されます。

expect.poll ​

expect.poll のグローバル設定オプションの設定。これらは、expect.poll(condition, options) に渡すことができるオプションと同じです。

expect.poll.interval ​
  • 型: number
  • デフォルト: 50

ポーリング間隔(ミリ秒単位)。

expect.poll.timeout ​
  • 型: number
  • デフォルト: 1000

ポーリングタイムアウト(ミリ秒単位)。

printConsoleTrace ​

  • 型: boolean
  • デフォルト: false

console メソッドを呼び出すときに常にコンソールトレースを出力します。これはデバッグに役立ちます。

attachmentsDir 3.2.0+ ​

  • 型: string
  • デフォルト: '.vitest-attachments'

context.annotate によって作成された添付ファイルを保存するためのディレクトリパスの設定。プロジェクトルートからの相対パスの設定。

Pager
前のページ機能
次のページテストAPIリファレンス

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/config/

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

Copyright (c) 2021-Present Vitest Team