Vitestの設定
Vitestの設定ファイルを作成するには、ガイドに従ってください。先に進む前に、Vitestの設定解決の仕組みを理解していることを確認してください。
警告
ここにリストされているすべてのオプションは、設定内のtest
プロパティにあります。
export default defineConfig({
test: {
exclude: [],
},
})
ヒント
以下のオプションに加えて、Viteの任意の設定オプションも使用できます。たとえば、グローバル変数を定義するためのdefine
や、エイリアスを定義するためのresolve.alias
などです。
ワークスペースプロジェクトの設定内でサポートされていないすべての設定オプションには、横に * マークが付いています。
include
- 型:
string[]
- デフォルト:
['**/*.{test,spec}.?(c|m)[jt]s?(x)']
- CLI:
vitest [...include]
,vitest **/*.test.js
テストファイルに一致するグロブパターンのリスト。
exclude
- 型:
string[]
- デフォルト:
['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*']
- CLI:
vitest --exclude "**/除外ファイル"
テストファイルから除外する必要があるグロブパターンのリスト。
警告
このオプションはカバレッジに影響しません。カバレッジレポートから特定のファイルを削除する必要がある場合は、coverage.exclude
を使用してください。
これは、CLIフラグで指定した場合、設定を上書きしない唯一のオプションです。--exclude
フラグを介して追加されたすべてのグロブパターンは、設定のexclude
に追加されます。
includeSource
- 型:
string[]
- デフォルト:
[]
インソースのテストファイルのグロブを含めます。
定義すると、Vitestは内部にimport.meta.vitest
を持つ一致するすべてのファイルを実行します。
server 0.34.0+
- 型:
{ 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
- デフォルト:
[]
Viteはインラインモジュールを処理します。これは、ESM形式(Nodeが処理できない)で.js
を出荷するパッケージを処理するのに役立ちます。
true
の場合、すべての依存関係がインライン化されます。ssr.noExternal
で指定されたすべての依存関係は、デフォルトでインライン化されます。
server.deps.fallbackCJS
- 型:
boolean
- デフォルト:
false
依存関係が有効なESMパッケージである場合、パスに基づいてcjsバージョンを推測しようとします。これは、依存関係に誤ったESMファイルがある場合に役立つ可能性があります。
パッケージがESMモードとCJSモードで異なるロジックを持っている場合、これにより不整合が生じる可能性があります。
server.deps.cacheDir
- 型:
string
- デフォルト:
'node_modules/.vite'
キャッシュファイルを保存するディレクトリ。
deps
- 型:
{ optimizer?, ... }
依存関係解決の処理。
deps.optimizer 0.34.0+
- 型:
{ ssr?, web? }
- 参照: 依存関係の最適化オプション
依存関係の最適化を有効にします。テストが多い場合は、パフォーマンスが向上する可能性があります。Vitest 0.34.0より前は、deps.experimentalOptimizer
という名前でした。
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
から同じオプションを自動的に削除します。
ヒント
コードは実際にはcacheDir
またはtest.cache.dir
ディレクトリにあるため、デバッグ用にnode_modules
コードを編集することはできません。console.log
ステートメントでデバッグする場合は、直接編集するか、deps.optimizer?.[mode].force
オプションを使用して強制的にリバンドルしてください。
deps.optimizer.{mode}.enabled
- 型:
boolean
- デフォルト: Vitest 1.3.0以降は
false
依存関係の最適化を有効にします。
警告
このオプションは、Vite 4.3.2以降でのみ機能します。
deps.web 0.34.2+
- 型:
{ transformAssets?, ... }
変換モードがweb
に設定されている場合に、外部ファイルに適用されるオプション。デフォルトでは、jsdom
およびhappy-dom
はweb
モードを使用し、node
およびedge
環境はssr
変換モードを使用するため、これらのオプションはこれらの環境内のファイルには影響しません。
通常、node_modules
内のファイルは外部化されますが、これらのオプションはserver.deps.external
のファイルにも影響します。
deps.web.transformAssets
- 型:
boolean
- デフォルト:
true
Vitestはアセット(.png、.svg、.jpgなど)ファイルを処理し、ブラウザでViteが行うようにそれらを解決する必要がありますか。
クエリが指定されていない場合、このモジュールのデフォルトのエクスポートはアセットへのパスと等しくなります。
deps.web.transformCss
- 型:
boolean
- デフォルト:
true
VitestがCSS(.css, .scss, .sassなど)ファイルを処理し、Viteがブラウザで行うように解決するかどうか。
css
オプションでCSSファイルが無効になっている場合、このオプションは ERR_UNKNOWN_FILE_EXTENSION
エラーを抑制するだけです。
deps.web.transformGlobPattern
- 型:
RegExp | RegExp[]
- デフォルト:
[]
変換する必要がある外部ファイルに一致する正規表現パターン。
デフォルトでは、node_modules
内のファイルは外部化され、CSSまたはアセットの場合を除き変換されません。また、対応するオプションが無効になっていない限り変換されません。
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
でパッケージを検索したい場合は、他のオプションと一緒に含めてください。
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
- 型:
string | Record<string, string>
--reporter=json
オプションも指定されている場合、ベンチマーク結果をファイルに書き込みます。文字列ではなくオブジェクトを提供することで、複数のレポーターを使用する場合に個々の出力を定義できます。
CLIコマンドでオブジェクトを提供するには、次の構文を使用します:--outputFile.json=./path --outputFile.junit=./other-path
。
benchmark.outputJson 1.6.0+
- 型:
string | undefined
- デフォルト:
undefined
ベンチマーク結果を保存するためのファイルパス。後で --compare
オプションで使用できます。
例
# 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 1.6.0+
- 型:
string | undefined
- デフォルト:
undefined
現在の実行と比較するための、以前のベンチマーク結果へのファイルパス。
alias
- 型:
Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>
テスト内で実行するときにカスタムエイリアスを定義します。これらは、resolve.alias
からのエイリアスとマージされます。
警告
Vitestは、特定の落とし穴があるVite SSRプリミティブを使用してテストを実行します。
globals
- 型:
boolean
- デフォルト:
false
- CLI:
--globals
,--globals=false
デフォルトでは、vitest
は明示性を高めるためにグローバルAPIを提供していません。JestのようにAPIをグローバルに使用したい場合は、CLIに --globals
オプションを渡すか、設定で globals: true
を追加できます。
// vitest.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
globals: true,
},
})
グローバルAPIでTypeScriptを動作させるには、tsconfig.json
の types
フィールドに vitest/globals
を追加します。
// tsconfig.json
{
"compilerOptions": {
"types": ["vitest/globals"]
}
}
プロジェクトで unplugin-auto-import
をすでに使用している場合は、これらのAPIを自動インポートするために直接使用することもできます。
// vitest.config.ts
import { defineConfig } from 'vitest/config'
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
AutoImport({
imports: ['vitest'],
dts: true, // generate TypeScript declaration
}),
],
})
environment
- 型:
'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string
- デフォルト:
'node'
- CLI:
--environment=<env>
テストに使用される環境。Vitestのデフォルト環境はNode.js環境です。Webアプリケーションを構築している場合は、jsdom
または happy-dom
のいずれかを使用して、ブラウザのような環境を使用できます。エッジ関数を構築している場合は、edge-runtime
環境を使用できます。
ファイルの先頭に @vitest-environment
ドックブロックまたはコメントを追加することで、そのファイルのすべてのテストに使用する別の環境を指定できます。
ドックブロックスタイル
/**
* @vitest-environment jsdom
*/
test('use jsdom in this test file', () => {
const element = document.createElement('div')
expect(element).not.toBeNull()
})
コメントスタイル
// @vitest-environment happy-dom
test('use happy-dom in this test file', () => {
const element = document.createElement('div')
expect(element).not.toBeNull()
})
Jestとの互換性のために、@jest-environment
もあります。
/**
* @jest-environment jsdom
*/
test('use jsdom in this test file', () => {
const element = document.createElement('div')
expect(element).not.toBeNull()
})
--isolate=false
フラグを指定してVitestを実行している場合、テストは次の順序で実行されます:node
、jsdom
、happy-dom
、edge-runtime
、カスタム環境
。つまり、同じ環境のすべてのテストはグループ化されますが、引き続き順番に実行されます。
0.23.0以降では、カスタム環境も定義できます。組み込み以外の環境を使用する場合、Vitestはパッケージ vitest-environment-${name}
のロードを試みます。そのパッケージは Environment
の形式のオブジェクトをエクスポートする必要があります。
import type { Environment } from 'vitest'
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
setup() {
// custom setup
return {
teardown() {
// called after all tests with this env have been run
}
}
}
}
また、Vitestは、拡張したい場合のために、vitest/environments
エントリーを介して builtinEnvironments
を公開します。環境の拡張の詳細については、ガイドを参照してください。
ヒント
Vitest 1.3.0以降、jsdom環境は、現在の JSDOM インスタンスと等しい jsdom
グローバル変数を公開します。TypeScriptにそれを認識させたい場合は、この環境を使用するときに tsconfig.json
に vitest/jsdom
を追加できます。
{
"compilerOptions": {
"types": ["vitest/jsdom"]
}
}
environmentOptions
- 型:
Record<'jsdom' | string, unknown>
- デフォルト:
{}
これらのオプションは、現在の environment
の setup
メソッドに渡されます。デフォルトでは、テスト環境としてJSDOMを使用している場合、JSDOMオプションのみを設定できます。
environmentMatchGlobs
- 型:
[string, EnvironmentName][]
- デフォルト:
[]
グロブに基づいて環境を自動的に割り当てます。最初の一致が使用されます。
例
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
environmentMatchGlobs: [
// all tests in tests/dom will run in jsdom
['tests/dom/**', 'jsdom'],
// all tests in tests/ with .edge.test.ts will run in edge-runtime
['**\/*.edge.test.ts', 'edge-runtime'],
// ...
]
}
})
poolMatchGlobs 0.29.4+
- 型:
[string, 'threads' | 'forks' | 'vmThreads' | 'vmForks' | 'typescript'][]
- デフォルト:
[]
グロブに基づいて、テストが実行されるプールを自動的に割り当てます。最初の一致が使用されます。
例
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
poolMatchGlobs: [
// all tests in "worker-specific" directory will run inside a worker as if you enabled `--pool=threads` for them,
['**/tests/worker-specific/**', 'threads'],
// run all tests in "browser" directory in an actual browser
['**/tests/browser/**', 'browser'],
// all other tests will run based on "browser.enabled" and "threads" options, if you didn't specify other globs
// ...
]
}
})
update *
- 型:
boolean
- デフォルト:
false
- CLI:
-u
,--update
,--update=false
スナップショットファイルを更新します。これにより、変更されたすべてのスナップショットが更新され、古いスナップショットが削除されます。
watch *
- 型:
boolean
- デフォルト:
!process.env.CI
- CLI:
-w
,--watch
,--watch=false
ウォッチモードを有効にします。
root
- 型:
string
- CLI:
-r <パス>
,--root=<パス>
プロジェクトルート
reporters *
- 型:
Reporter | Reporter[]
- デフォルト:
'default'
- CLI:
--reporter=<name>
,--reporter=<name1> --reporter=<name2>
出力用のカスタムレポーター。レポーターは、Reporterインスタンス、組み込みレポーターを選択するための文字列、またはカスタム実装へのパス(例:'./path/to/reporter.ts'
、'@scope/reporter'
)にできます。
outputFile *
- 型:
string | Record<string, string>
- CLI:
--outputFile=<path>
,--outputFile.json=./path
--reporter=json
、--reporter=html
、または--reporter=junit
オプションも指定されている場合に、テスト結果をファイルに書き込みます。文字列の代わりにオブジェクトを提供することで、複数のレポーターを使用する場合に個別の出力を定義できます。
pool * 1.0.0+
- 型:
'threads' | 'forks' | 'vmThreads' | 'vmForks'
- デフォルト:
'threads'
- 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 *
VMコンテキスト(サンドボックス化された環境内)を使用して、threads
プールでテストを実行します。
これによりテストの実行が高速になりますが、ESMコードを実行するとVMモジュールが不安定になります。テストはメモリリークします。これを解決するには、poolOptions.vmThreads.memoryLimit
の値を手動で編集することを検討してください。
警告
サンドボックスでコードを実行することにはいくつかの利点(テストの高速化)がありますが、多くの欠点もあります。
- (
fs
、path
など)のようなネイティブモジュール内のグローバル変数は、テスト環境に存在するグローバル変数とは異なります。その結果、これらのネイティブモジュールによってスローされるエラーは、コードで使用されるエラーコンストラクターとは異なるエラーコンストラクターを参照します。
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 * 1.0.0+
- 型:
Record<'threads' | 'forks' | 'vmThreads' | 'vmForks', {}>
- デフォルト:
{}
poolOptions.threads
threads
プールのオプション。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
poolOptions: {
threads: {
// Threads related options here
}
}
}
})
poolOptions.threads.maxThreads *
- 型:
number
- デフォルト: 利用可能なCPU数
最大スレッド数。VITEST_MAX_THREADS
環境変数も使用できます。
poolOptions.threads.minThreads *
- 型:
number
- デフォルト: 利用可能なCPU数
最小スレッド数。VITEST_MIN_THREADS
環境変数も使用できます。
poolOptions.threads.singleThread
- 型:
boolean
- デフォルト:
false
単一のワーカースレッド内の同じ環境ですべてのテストを実行します。これにより、組み込みのモジュール分離が無効になります(ソースコードまたはインラインコードは、各テストで再評価されます)が、テストのパフォーマンスを向上させることができます。
警告
このオプションはテストを順番に実行させますが、Jestの--runInBand
とは異なります。Vitestは、テストを並行して実行するだけでなく、分離を提供するためにもワーカーを使用します。このオプションを無効にすると、テストは順番に実行されますが、同じグローバルコンテキストで実行されるため、自分で分離を提供する必要があります。
グローバル状態(フロントエンドフレームワークは通常そうします)に依存している場合、またはコードが各テストで別々に定義される環境に依存している場合は、あらゆる種類の問題が発生する可能性があります。しかし、グローバル状態に依存しないテストや、それを簡単に回避できるテストでは、速度が大幅に向上する可能性があります(最大3倍速くなります)。
poolOptions.threads.useAtomics *
- 型:
boolean
- デフォルト:
false
Atomicsを使用してスレッドを同期します。
これにより、場合によってはパフォーマンスが向上する可能性がありますが、古いNodeバージョンではセグメンテーション違反が発生する可能性があります。
poolOptions.threads.isolate
- 型:
boolean
- デフォルト:
true
各テストファイルの環境を分離します。
poolOptions.threads.execArgv *
- 型:
string[]
- デフォルト:
[]
スレッドでnode
に追加の引数を渡します。詳細については、コマンドラインAPI | Node.jsを参照してください。
警告
一部のオプションはワーカーをクラッシュさせる可能性があるため、使用には注意してください。例:--prof、--title。 https://github.com/nodejs/node/issues/41103を参照してください。
poolOptions.forks
forks
プールのオプション。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
poolOptions: {
forks: {
// Forks related options here
}
}
}
})
poolOptions.forks.maxForks *
- 型:
number
- デフォルト: 利用可能なCPU数
最大フォーク数。
poolOptions.forks.minForks *
- 型:
number
- デフォルト: 利用可能なCPU数
最小フォーク数。
poolOptions.forks.isolate
- 型:
boolean
- デフォルト:
true
各テストファイルの環境を分離します。
poolOptions.forks.singleFork
- 型:
boolean
- デフォルト:
false
単一の子プロセス内の同じ環境ですべてのテストを実行します。これにより、組み込みのモジュール分離が無効になります(ソースコードまたはインラインコードは、各テストで再評価されます)が、テストのパフォーマンスを向上させることができます。
警告
このオプションはテストを順番に実行させますが、Jestの--runInBand
とは異なります。Vitestは、テストを並行して実行するだけでなく、分離を提供するためにも子プロセスを使用します。このオプションを無効にすると、テストは順番に実行されますが、同じグローバルコンテキストで実行されるため、自分で分離を提供する必要があります。
グローバル状態(フロントエンドフレームワークは通常そうします)に依存している場合、またはコードが各テストで別々に定義される環境に依存している場合は、あらゆる種類の問題が発生する可能性があります。しかし、グローバル状態に依存しないテストや、それを簡単に回避できるテストでは、速度が大幅に向上する可能性があります(最大3倍速くなります)。
poolOptions.forks.execArgv *
- 型:
string[]
- デフォルト:
[]
子プロセス内のnode
プロセスに追加の引数を渡します。詳細については、コマンドラインAPI | Node.jsを参照してください。
警告
一部のオプションはワーカーをクラッシュさせる可能性があるため、使用には注意してください。例:--prof、--title。 https://github.com/nodejs/node/issues/41103を参照してください。
poolOptions.vmThreads
vmThreads
プールのオプション。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
poolOptions: {
vmThreads: {
// VM threads related options here
}
}
}
})
poolOptions.vmThreads.maxThreads *
- 型:
number
- デフォルト: 利用可能なCPU数
最大スレッド数。VITEST_MAX_THREADS
環境変数も使用できます。
poolOptions.vmThreads.minThreads *
- 型:
number
- デフォルト: 利用可能なCPU数
最小スレッド数。VITEST_MIN_THREADS
環境変数も使用できます。
poolOptions.vmThreads.memoryLimit *
- 型:
string | number
- デフォルト:
1 / CPUコア数
ワーカーがリサイクルされる前に、ワーカーのメモリ制限を指定します。この値は環境に大きく依存するため、デフォルトに依存するのではなく、手動で指定することをお勧めします。
ヒント
実装は、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
- ギビバイト
警告
パーセンテージに基づくメモリ制限は、Linux CircleCIワーカーでは、誤ったシステムメモリが報告されるため機能しません。
poolOptions.vmThreads.useAtomics *
- 型:
boolean
- デフォルト:
false
Atomicsを使用してスレッドを同期します。
これにより、場合によってはパフォーマンスが向上する可能性がありますが、古いNodeバージョンではセグメンテーション違反が発生する可能性があります。
poolOptions.vmThreads.execArgv *
- 型:
string[]
- デフォルト:
[]
VMコンテキストでnode
プロセスに追加の引数を渡します。詳しくはコマンドラインAPI | Node.jsをご覧ください。
警告
一部のオプションはワーカーをクラッシュさせる可能性があるため、使用には注意してください。例:--prof、--title。 https://github.com/nodejs/node/issues/41103を参照してください。
poolOptions.vmForks *
vmForks
プール用のオプション。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
poolOptions: {
vmForks: {
// VM forks related options here
}
}
}
})
poolOptions.vmForks.maxForks *
- 型:
number
- デフォルト: 利用可能なCPU数
最大スレッド数。VITEST_MAX_FORKS
環境変数も使用できます。
poolOptions.vmForks.minForks *
- 型:
number
- デフォルト: 利用可能なCPU数
最小スレッド数。VITEST_MIN_FORKS
環境変数も使用できます。
poolOptions.vmForks.memoryLimit *
- 型:
string | number
- デフォルト:
1 / CPUコア数
ワーカーがリサイクルされる前のメモリ制限を指定します。この値は環境に大きく依存するため、デフォルトに頼るのではなく手動で指定することをお勧めします。値の計算方法については、poolOptions.vmThreads.memoryLimit
で説明されています。
poolOptions.vmForks.execArgv *
- 型:
string[]
- デフォルト:
[]
VMコンテキストでnode
プロセスに追加の引数を渡します。詳しくはコマンドラインAPI | Node.jsをご覧ください。
警告
一部のオプションはワーカーをクラッシュさせる可能性があるため、使用には注意してください。例:--prof、--title。 https://github.com/nodejs/node/issues/41103を参照してください。
fileParallelism 1.1.0+
- 型:
boolean
- デフォルト:
true
- CLI:
--no-file-parallelism
,--fileParallelism=false
すべてのテストファイルを並行して実行するかどうか。これをfalse
に設定すると、maxWorkers
およびminWorkers
オプションが1
に上書きされます。
maxWorkers 1.1.0+
- 型:
number
テストを実行する最大ワーカー数。poolOptions.{threads,vmThreads}.maxThreads
/poolOptions.forks.maxForks
が優先されます。
minWorkers 1.1.0+
- 型:
number
テストを実行する最小ワーカー数。poolOptions.{threads,vmThreads}.minThreads
/poolOptions.forks.minForks
が優先されます。
testTimeout
- 型:
number
- デフォルト:
5000
- CLI:
--test-timeout=5000
,--testTimeout=5000
テストのデフォルトタイムアウト(ミリ秒単位)
hookTimeout
- 型:
number
- デフォルト:
10000
- CLI:
--hook-timeout=10000
,--hookTimeout=10000
フックのデフォルトタイムアウト(ミリ秒単位)
teardownTimeout *
- 型:
number
- デフォルト:
10000
- CLI:
--teardown-timeout=5000
,--teardownTimeout=5000
Vitestがシャットダウンするときにクローズを待つデフォルトタイムアウト(ミリ秒単位)
silent *
- 型:
boolean
- デフォルト:
false
- CLI:
--silent
,--silent=false
テストからのコンソール出力を抑制します
setupFiles
- 型:
string | string[]
セットアップファイルへのパス。各テストファイルの前に実行されます。
情報
セットアップファイルを変更すると、すべてのテストが再実行されます。
スレッドを区別するために、内部でprocess.env.VITEST_POOL_ID
(整数のような文字列)を使用できます。
ヒント
なお、--isolate=false
を実行している場合、このセットアップファイルは同じグローバルスコープ内で複数回実行されます。つまり、各テストの前に同じグローバルオブジェクトにアクセスしているため、必要な回数以上同じことをしないようにしてください。
たとえば、グローバル変数に依存する可能性があります
import { config } from '@some-testing-lib'
if (!globalThis.defined) {
config.plugins = [myCoolPlugin]
computeHeavyThing()
globalThis.defined = true
}
// hooks are reset before each suite
afterEach(() => {
cleanup()
})
globalThis.resetBeforeEachTest = true
globalSetup
- 型:
string | string[]
プロジェクトルートからの相対的なグローバルセットアップファイルへのパス。
グローバルセットアップファイルは、名前付き関数setup
とteardown
、または破棄関数を返すdefault
関数をエクスポートできます(例)。
情報
複数のグローバルセットアップファイルが可能です。セットアップと破棄は、破棄が逆順で順番に実行されます。
警告
Vitest 1.0.0-beta以降、グローバルセットアップは、少なくとも1つの実行中のテストがある場合にのみ実行されます。つまり、テストファイルが変更された後、ウォッチモード中にグローバルセットアップが実行を開始する可能性があります(テストファイルは、実行前にグローバルセットアップが完了するのを待ちます)。
グローバルセットアップは異なるグローバルスコープで実行されるため、テストはこの場所で定義された変数にアクセスできないことに注意してください。ただし、1.0.0以降では、provide
メソッドを使用してシリアライズ可能なデータをテストに渡すことができます
export default function setup({ provide }) {
provide('wsPort', 3000)
}
import type { GlobalSetupContext } from 'vitest/node'
export default function setup({ provide }: GlobalSetupContext) {
provide('wsPort', 3000)
}
// You can also extend `ProvidedContext` type
// to have type safe access to `provide/inject` methods:
declare module 'vitest' {
export interface ProvidedContext {
wsPort: number
}
}
import { inject } from 'vitest'
inject('wsPort') === 3000
watchExclude *
- 型:
string[]
- デフォルト:
['**/node_modules/**', '**/dist/**']
- 非推奨
server.watch.ignored
を使用してください
ウォッチの再実行をトリガーしないように無視されるファイルパスのグロブパターン。
forceRerunTriggers *
- 型:
string[]
- デフォルト:
['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']
スイート全体の再実行をトリガーするファイルパスのグロブパターン。--changed
引数と組み合わせると、トリガーがgit diffで見つかった場合にテストスイート全体を実行します。
Viteがモジュールグラフを構築できないため、CLIコマンドの呼び出しをテストする場合に役立ちます
test('execute a script', async () => {
// Vitest cannot rerun this test, if content of `dist/index.js` changes
await execa('node', ['dist/index.js'])
})
ヒント
ファイルがwatchExclude
によって除外されていないことを確認してください。
coverage *
カバレッジ収集には、v8
、istanbul
、またはカスタムカバレッジソリューションを使用できます。
ドット表記でCLIにカバレッジオプションを指定できます
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all
警告
ドット表記でカバレッジオプションを使用する場合は、--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', '.cts', '.tsx', '.jsx', '.vue', '.svelte', '.marko']
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.extension=<extension>
,--coverage.extension=<extension1> --coverage.extension=<extension2>
coverage.exclude
- 型:
string[]
- デフォルト
[
'coverage/**',
'dist/**',
'**/[.]**',
'packages/*/test?(s)/**',
'**/*.d.ts',
'**/virtual:*',
'**/__x00__*',
'**/\x00*',
'cypress/**',
'test?(s)/**',
'test?(-*).?(c|m)[jt]s?(x)',
'**/*{.,-}{test,spec}?(-d).?(c|m)[jt]s?(x)',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.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>
グロブパターンとしてカバレッジから除外されるファイルのリスト。
このオプションは、すべてのデフォルトオプションを上書きします。無視する新しいパターンを追加するときは、デフォルトオプションを拡張してください
import { coverageConfigDefaults, defineConfig } from 'vitest/config'
export default defineConfig({
test: {
coverage: {
exclude: ['**/custom-pattern/**', ...coverageConfigDefaults.exclude]
},
},
})
coverage.all
- 型:
boolean
- デフォルト:
true
(Vitest1.0.0
以降) - 利用可能なプロバイダー:
'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
ウォッチ再実行時にカバレッジレポートをクリーンアップします
coverage.reportsDirectory
- 型:
string
- デフォルト:
'./coverage'
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.reportsDirectory=<path>
警告
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'] ] }
Vitest 1.2.0以降では、カスタムカバレッジレポーターを渡すこともできます。詳細については、ガイド - カスタムカバレッジレポーターを参照してください。
{
reporter: [
// Specify reporter using name of the NPM package
'@vitest/custom-coverage-reporter',
['@vitest/custom-coverage-reporter', { someOption: true }],
// Specify reporter using local path
'/absolute/path/to/custom-reporter.cjs',
['/absolute/path/to/custom-reporter.cjs', { someOption: true }],
]
}
Vitest 0.31.0以降では、Vitest UIでカバレッジレポートを確認できます。詳細については、Vitest UIカバレッジを確認してください。
coverage.reportOnFailure 0.31.2+
- 型:
boolean
- デフォルト:
false
(Vitest0.34.0
以降) - 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.reportOnFailure
,--coverage.reportOnFailure=false
テストが失敗した場合でもカバレッジレポートを生成します。
coverage.allowExternal
- 型:
boolean
- デフォルト:
false
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.allowExternal
,--coverage.allowExternal=false
プロジェクトのroot
外のファイルのカバレッジを収集します。
coverage.skipFull
- 型:
boolean
- デフォルト:
false
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.skipFull
,--coverage.skipFull=false
ステートメント、ブランチ、関数カバレッジが100%のファイルを表示しません。
coverage.thresholds
カバレッジ閾値のオプション
coverage.thresholds.lines
- 型:
number
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.thresholds.lines=<number>
行のグローバル閾値。詳細については、istanbulのドキュメントを参照してください。
coverage.thresholds.functions
- 型:
number
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.thresholds.functions=<number>
関数のグローバル閾値。詳細については、istanbulのドキュメントを参照してください。
coverage.thresholds.branches
- 型:
number
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.thresholds.branches=<number>
ブランチのグローバル閾値。詳細については、istanbulのドキュメントを参照してください。
coverage.thresholds.statements
- 型:
number
- 利用可能なプロバイダー:
'v8' | 'istanbul'
- CLI:
--coverage.thresholds.statements=<number>
ステートメントのグローバル閾値。詳細については、istanbulのドキュメントを参照してください。
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'
グロブパターンに一致するファイルの閾値を設定します。
{
coverage: {
thresholds: {
// Thresholds for all files
functions: 95,
branches: 70,
// Thresholds for matching glob pattern
'src/utils/**.ts': {
statements: 95,
functions: 90,
branches: 85,
lines: 80,
},
// Files matching this pattern will only have lines thresholds set.
// Global thresholds are not inherited.
'**/math.ts': {
lines: 100,
}
}
}
}
coverage.ignoreEmptyLines
- 型:
boolean
- デフォルト:
false
- プロバイダーで利用可能:
'v8'
- CLI:
--coverage.ignoreEmptyLines=<boolean>
空行、コメント、その他の非ランタイムコード(例:Typescript型)を無視します。
このオプションは、使用するコンパイラが変換されたコードからコメントやその他の非ランタイムコードを削除する場合にのみ機能します。デフォルトでは、Viteは.ts
、.tsx
、.jsx
ファイルからコメントとTypescript型を削除するESBuildを使用します。
ESBuildを他のファイルにも適用する場合は、esbuild
オプションでそれらを定義してください。
import { defineConfig } from 'vitest/config'
export default defineConfig({
esbuild: {
// Transpile all files with ESBuild to remove comments from code coverage.
// Required for `test.coverage.ignoreEmptyLines` to work:
include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.ts', '**/*.tsx'],
},
test: {
coverage: {
provider: 'v8',
ignoreEmptyLines: true,
},
},
})
coverage.ignoreClassMethods
- 型:
string[]
- デフォルト:
[]
- プロバイダーで利用可能:
'istanbul'
- CLI:
--coverage.ignoreClassMethods=<method>
カバレッジから無視するクラスメソッド名の配列に設定します。詳細については、istanbulのドキュメントを参照してください。
coverage.watermarks
- 型
{
statements?: [number, number],
functions?: [number, number],
branches?: [number, number],
lines?: [number, number]
}
- デフォルト
{
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
という単語が含まれていないテストはスキップされます。
import { expect, test } from 'vitest'
// run
test('OnlyRunThis', () => {
expect(true).toBe(true)
})
// skipped
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 0.29.4+
- 型:
{ enabled?, name?, provider?, headless?, api?, slowHijackESM? }
- デフォルト:
{ enabled: false, headless: process.env.CI, api: 63315 }
- CLI:
--browser
,--browser=<name>
,--browser.name=chrome --browser.headless
ブラウザでVitestテストを実行します。デフォルトでは、テストの実行にWebdriverIOを使用しますが、browser.providerオプションで構成できます。
注意
実際のブラウザでのテストの詳細については、ガイドページを参照してください。
警告
これは実験的な機能です。破壊的な変更はSemVerに従わない可能性があるため、使用する場合はVitestのバージョンをピンしてください。
browser.enabled
- 型:
boolean
- デフォルト:
false
- CLI:
--browser
,--browser.enabled=false
デフォルトでは、すべてのテストをブラウザ内で実行します。poolMatchGlobs
オプションで上書きできます。
browser.name
- 型:
string
- CLI:
--browser=safari
特定のブラウザですべてのテストを実行します。さまざまなプロバイダーの可能なオプション
webdriverio
:firefox
,chrome
,edge
,safari
playwright
:firefox
,webkit
,chromium
- custom: プロバイダーに渡される任意の文字列
browser.headless
- 型:
boolean
- デフォルト:
process.env.CI
- CLI:
--browser.headless
,--browser.headless=false
ブラウザをheadless
モードで実行します。CIでVitestを実行している場合、デフォルトで有効になります。
browser.isolate
- 型:
boolean
- デフォルト:
true
- CLI:
--browser.isolate
,--browser.isolate=false
すべてのテストを別々のiframeで実行します。
browser.fileParallelism 1.3.0+
- 型:
boolean
- デフォルト:
fileParallelism
と同じ - CLI:
--browser.fileParallelism=false
すべてのテストiframeを同時に作成し、並行して実行されるようにします。
これにより、画面上に同時に複数のiframeが存在するため、インタラクティブAPI(クリックやホバーなど)を使用することは不可能になりますが、テストがこれらのAPIに依存しない場合は、すべてを同時に実行する方がはるかに速くなる可能性があります。
ヒント
browser.isolate=false
を使用して分離を無効にした場合でも、テストランナーの性質上、テストファイルは1つずつ実行されます。
browser.api
- 型:
number | { port?, strictPort?, host? }
- デフォルト:
63315
- CLI:
--browser.api=63315
,--browser.api.port=1234, --browser.api.host=example.com
ブラウザでコードを提供する Vite サーバーのオプションを設定します。 test.api
オプションには影響しません。
browser.provider
- 型:
'webdriverio' | 'playwright' | string
- デフォルト:
'webdriverio'
- CLI:
--browser.provider=playwright
ブラウザテストを実行する際に使用されるプロバイダーへのパス。Vitest は webdriverio
(デフォルト) と playwright
の 2 つのプロバイダーを提供します。カスタムプロバイダーは default
エクスポートを使用してエクスポートし、次の形状を持つ必要があります。
export interface BrowserProvider {
name: string
getSupportedBrowsers: () => readonly string[]
initialize: (ctx: Vitest, options: { browser: string; options?: BrowserProviderOptions }) => Awaitable<void>
openPage: (url: string) => Awaitable<void>
close: () => Awaitable<void>
}
警告
これはライブラリ作成者向けの高度な API です。ブラウザでテストを実行する必要がある場合は、browser オプションを使用してください。
browser.providerOptions 1.0.0+
- 型:
BrowserProviderOptions
provider.initialize
を呼び出すときにプロバイダーに渡されるオプション。
export default defineConfig({
test: {
browser: {
providerOptions: {
launch: {
devtools: true,
}
}
}
}
})
ヒント
組み込みプロバイダーを使用する際に型安全性を高めるには、tsconfig の compilerOptions.types
フィールドに、使用しているプロバイダーの型を追加できます。
{
"compilerOptions": {
"types": [
"@vitest/browser/providers/webdriverio",
"@vitest/browser/providers/playwright"
]
}
}
browser.slowHijackESM 0.31.0+
- 型:
boolean
- デフォルト:
false
Node.js でテストを実行する場合、Vitest は独自のモジュール解決を使用して、vi.mock
構文でモジュールを簡単にモックできます。しかし、ブラウザで ES モジュール解決を再現することは容易ではないため、ブラウザが消費できるようにソースファイルを変換する必要があります。
このオプションは、Node.js 内で実行されるテストには影響しません。
vi.spyOn
で ES モジュールをスパイすることに依存している場合は、この実験的な機能を有効にしてモジュールエクスポートをスパイできるようにすることができます。
browser.indexScripts 1.6.0+
- 型:
BrowserScript[]
- デフォルト:
[]
テスト iframe が開始される前に、index HTML に注入する必要があるカスタムスクリプト。この HTML ドキュメントは、iframe を設定するだけで、実際にはコードをインポートしません。
スクリプトの src
と content
は、Vite プラグインによって処理されます。スクリプトは、次の形式で提供する必要があります。
export interface BrowserScript {
/**
* If "content" is provided and type is "module", this will be its identifier.
*
* If you are using TypeScript, you can add `.ts` extension here for example.
* @default `injected-${index}.js`
*/
id?: string
/**
* JavaScript content to be injected. This string is processed by Vite plugins if type is "module".
*
* You can use `id` to give Vite a hint about the file extension.
*/
content?: string
/**
* Path to the script. This value is resolved by Vite so it can be a node module or a file path.
*/
src?: string
/**
* If the script should be loaded asynchronously.
*/
async?: boolean
/**
* Script type.
* @default 'module'
*/
type?: string
}
browser.testerScripts 1.6.0+
- 型:
BrowserScript[]
- デフォルト:
[]
テスト環境が開始される前に、テスター HTML に注入する必要があるカスタムスクリプト。これは、Vitest ブラウザ実装に必要なポリフィルを注入するのに役立ちます。ほとんどの場合、これの代わりに setupFiles
を使用することをお勧めします。
スクリプトの src
と content
は、Vite プラグインによって処理されます。
clearMocks
- 型:
boolean
- デフォルト:
false
各テストの前にすべてのスパイで .mockClear()
を呼び出します。これにより、モックの履歴はクリアされますが、実装はデフォルトのものにリセットされません。
mockReset
- 型:
boolean
- デフォルト:
false
各テストの前にすべてのスパイで .mockReset()
を呼び出します。これにより、モックの履歴がクリアされ、実装が空の関数にリセットされます (undefined
を返します)。
restoreMocks
- 型:
boolean
- デフォルト:
false
各テストの前にすべてのスパイで .mockRestore()
を呼び出します。これにより、モックの履歴がクリアされ、実装が元のものにリセットされます。
unstubEnvs 0.26.0+
- 型:
boolean
- デフォルト:
false
各テストの前に vi.unstubAllEnvs
を呼び出します。
unstubGlobals 0.26.0+
- 型:
boolean
- デフォルト:
false
各テストの前に vi.unstubAllGlobals
を呼び出します。
testTransformMode 0.34.0+
- 型:
{ web?, ssr? }
グロブパターンに一致するテスト内でインポートされたすべてのモジュールの変換方法を決定します。デフォルトでは、環境に依存します。たとえば、JSDOM 環境でのテストはすべてのファイルを ssr: false
フラグで処理し、Node 環境でのテストはすべてのモジュールを ssr: true
で処理します。
testTransformMode.ssr
- 型:
string[]
- デフォルト:
[]
指定されたテスト内のすべてのモジュールに SSR 変換パイプラインを使用します。
Vite プラグインは、これらのファイルを処理するときに ssr: true
フラグを受け取ります。
testTransformMode.web
- 型:
string[]
- デフォルト:
[]
最初に通常の変換パイプライン (ブラウザをターゲット) を実行し、次に SSR 書き換えを実行して Node でコードを実行します。
Vite プラグインは、これらのファイルを処理するときに ssr: false
フラグを受け取ります。
snapshotFormat*
- 型:
PrettyFormatOptions
スナップショットテストのフォーマットオプション。これらのオプションは、pretty-format
に渡されます。
ヒント
このオブジェクトの plugins
フィールドは無視されることに注意してください。
pretty-format プラグインを介してスナップショットシリアライザーを拡張する必要がある場合は、expect.addSnapshotSerializer
API または snapshotSerializers オプションを使用してください。
snapshotSerializers* 1.3.0+
- 型:
string[]
- デフォルト:
[]
カスタムスナップショットシリアライザーを追加する場合に役立つ、スナップショットテスト用のスナップショットシリアライザーモジュールへのパスのリスト。詳細については、カスタムシリアライザーを参照してください。
resolveSnapshotPath*
- 型:
(testPath: string, snapExtension: string) => string
- デフォルト: スナップショットファイルを
__snapshots__
ディレクトリに保存します
デフォルトのスナップショットパスを上書きします。たとえば、スナップショットをテストファイルの隣に保存するには、次のようになります。
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 パイプラインによって処理されるファイルの RegExp パターン。
ヒント
すべての CSS ファイルを処理するには、/.+/
を使用します。
css.exclude
- 型:
RegExp | RegExp[]
- デフォルト:
[]
空の CSS ファイルを返すファイルの RegExp パターン。
css.modules
- 型:
{ classNameStrategy? }
- デフォルト:
{}
css.modules.classNameStrategy
- 型:
'stable' | 'scoped' | 'non-scoped'
- デフォルト:
'stable'
CSS ファイルを処理することにした場合は、CSS モジュール内のクラス名をスコープするかどうかを設定できます。次のオプションから選択できます。
stable
: クラス名は_${name}_${hashedFilename}
として生成されます。これは、CSS の内容が変更された場合でも生成されたクラスは同じままですが、ファイルの名前が変更された場合、またはファイルが別のフォルダーに移動された場合は変更されることを意味します。この設定は、スナップショット機能を使用する場合に役立ちます。scoped
: クラス名は通常どおりに生成され、css.modules.generateScopeName
メソッドがある場合はそれを尊重し、CSS 処理が有効になります。デフォルトでは、ファイル名は_${name}_${hash}
として生成されます。ここで、hash にはファイル名とファイルの内容が含まれます。non-scoped
: クラス名はハッシュ化されません。
警告
デフォルトでは、Vitest はプロキシをエクスポートし、CSS モジュールの処理をバイパスします。クラスの CSS プロパティに依存している場合は、include
オプションを使用して CSS 処理を有効にする必要があります。
maxConcurrency
- 型:
number
- デフォルト:
5
- CLI:
--max-concurrency=10
,--maxConcurrency=10
test.concurrent
でマークされた同時に実行できるテストの数。
この制限を超えたテストは、利用可能なスロットが現れたときに実行されるようにキューに入れられます。
cache *
- 型:
false
- CLI:
--no-cache
,--cache=false
キャッシュ機能を無効にしたい場合は、このオプションを使用してください。現在、Vitestはテスト結果のキャッシュを保存し、より長く実行され、失敗したテストを最初に実行します。
sequence
- 型:
{ sequencer?, shuffle?, seed?, hooks?, setupFiles? }
テストをどのようにソートするかについてのオプション。
ドット表記でCLIにシーケンスオプションを提供できます。
npx vitest --sequence.shuffle --sequence.seed=1000
sequence.sequencer *
- 型:
TestSequencerConstructor
- デフォルト:
BaseSequencer
シャーディングとソートのためのメソッドを定義するカスタムクラス。 sort
とshard
メソッドのいずれか一方のみを再定義する必要がある場合は、vitest/node
からBaseSequencer
を拡張できますが、両方とも存在する必要があります。
シャーディングはソートの前に実行され、--shard
オプションが指定されている場合にのみ実行されます。
sequence.shuffle
- 型:
boolean | { files?, tests? }
- デフォルト:
false
- CLI:
--sequence.shuffle
,--sequence.shuffle=false
ファイルとテストをランダムに実行したい場合は、このオプションまたはCLI引数--sequence.shuffle
で有効にできます。
Vitestは通常、キャッシュを使用してテストをソートするため、実行時間の長いテストが早く開始され、テストの実行が高速になります。ファイルとテストがランダムな順序で実行されると、このパフォーマンスの向上は失われますが、以前の実行に偶然依存するテストを追跡するのに役立つ場合があります。
sequence.shuffle.files 1.4.0+
- 型:
boolean
- デフォルト:
false
- CLI:
--sequence.shuffle.files
,--sequence.shuffle.files=false
ファイルをランダム化するかどうか。このオプションを有効にすると、実行時間の長いテストが早く開始されないことに注意してください。
sequence.shuffle.tests 1.4.0+
- 型:
boolean
- デフォルト:
false
- CLI:
--sequence.shuffle.tests
,--sequence.shuffle.tests=false
テストをランダム化するかどうか。
sequence.concurrent 0.32.2+
- 型:
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'
- デフォルト:
'parallel'
- CLI:
--sequence.hooks=<value>
フックが実行される順序を変更します。
stack
は、「after」フックを逆順に並べ、「before」フックは定義された順序で実行しますlist
は、すべてのフックを定義された順序で並べますparallel
は、単一のグループのフックを並行して実行します(親スイートのフックは、現在のスイートのフックの前に実行されます)
ヒント
このオプションは、onTestFinished
には影響しません。常に逆順で呼び出されます。
sequence.setupFiles 0.29.3+
- 型:
'list' | 'parallel'
- デフォルト:
'parallel'
- CLI:
--sequence.setupFiles=<value>
セットアップファイルが実行される順序を変更します。
list
は、セットアップファイルを定義された順序で実行しますparallel
は、セットアップファイルを並行して実行します
typecheck
型チェックテスト環境を構成するためのオプション。
typecheck.enabled 1.0.0+
- 型:
boolean
- デフォルト:
false
- CLI:
--typecheck
,--typecheck.enabled
通常のテストと一緒に型チェックを有効にします。
typecheck.only 1.0.0+
- 型:
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へのパス。
slowTestThreshold *
- 型:
number
- デフォルト:
300
- CLI:
--slow-test-threshold=<number>
,--slowTestThreshold=<number>
テストが遅いと見なされ、結果にそのように報告されるまでのミリ秒数。
chaiConfig 0.30.0+
- 型:
{ includeStack?, showDiff?, truncateThreshold? }
- デフォルト:
{ includeStack: false, showDiff: true, truncateThreshold: 40 }
Chai configと同等。
chaiConfig.includeStack
- 型:
boolean
- デフォルト:
false
アサーションエラーメッセージにスタックトレースを含めるかどうかを制御します。デフォルトのfalseは、エラーメッセージのスタックトレースを抑制します。
chaiConfig.showDiff
- 型:
boolean
- デフォルト:
true
スローされたAssertionErrorsにshowDiff
フラグを含めるかどうかを制御します。false
は常にfalse
になります。true
は、アサーションが差分を表示するように要求した場合にtrueになります。
chaiConfig.truncateThreshold
- 型:
number
- デフォルト:
40
アサーションエラーの実際の値と期待値の長さのしきい値を設定します。このしきい値を超えると、たとえば大きなデータ構造の場合、値は[ Array(3) ]
や{ Object (prop1, prop2) }
のようなものに置き換えられます。切り捨てを完全に無効にする場合は、0
に設定します。
この構成オプションは、test.each
タイトルの値とアサーションエラーメッセージ内の値を切り捨てることに影響します。
bail 0.31.0+
- 型:
number
- デフォルト:
0
- CLI:
--bail=<value>
指定された数のテストが失敗した場合、テストの実行を停止します。
デフォルトでは、Vitestは一部のテストケースが失敗した場合でも、すべてのテストケースを実行します。これは、100%成功したビルドのみに関心があり、テストの失敗が発生した場合に可能な限り早くテストの実行を停止したいCIビルドでは望ましくない場合があります。bail
オプションは、失敗が発生した場合にそれ以上のテストを実行しないようにすることで、CIの実行を高速化するために使用できます。
retry 0.32.3+
- 型:
number
- デフォルト:
0
- CLI:
--retry=<value>
テストが失敗した場合、指定された回数だけテストを再試行します。
onConsoleLog *
- 型:
(log: string, type: 'stdout' | 'stderr') => boolean | void
テストでのconsole.log
のカスタムハンドラー。false
を返すと、Vitestはログをコンソールに出力しません。
サードパーティのライブラリからのログをフィルタリングするのに役立ちます。
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 * 1.0.0+
- タイプ:
(error: Error, frame: ParsedStack) => boolean | void
エラー処理時に、各スタックトレースの各フレームにフィルタリング関数を適用します。第一引数のerror
は、標準のError
と同じプロパティを持つオブジェクトですが、実際のインスタンスではありません。
サードパーティライブラリのスタックトレースフレームをフィルタリングするのに役立ちます。
import type { ParsedStack } from 'vitest'
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
onStackTrace(error: Error, { file }: ParsedStack): boolean | void {
// If we've encountered a ReferenceError, show the whole stack.
if (error.name === 'ReferenceError')
return
// Reject all frames from third party libraries.
if (file.includes('node_modules'))
return false
},
},
})
diff 0.34.5+
- 型:
string
- CLI:
--diff=<value>
diffインターフェースの生成に使用されるdiff設定へのパス。diff表示をカスタマイズしたい場合に便利です。
import type { DiffOptions } from 'vitest'
import c from 'picocolors'
export default {
aIndicator: c.bold('--'),
bIndicator: c.bold('++'),
omitAnnotationLines: true,
} satisfies DiffOptions
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
diff: './vitest.diff.ts'
}
})
diff.truncateThreshold
- 型:
number
- デフォルト:
0
表示されるdiff結果の最大長。この閾値を超えるdiffは切り捨てられます。デフォルト値の0では切り捨ては行われません。
diff.truncateAnnotation
- 型:
string
- デフォルト:
'... Diff result is truncated'
diff結果が切り捨てられた場合に、その末尾に出力される注釈。
diff.truncateAnnotationColor
- タイプ:
DiffOptionsColor = (arg: string) => string
- デフォルト:
noColor = (string: string): string => string
切り捨て注釈の色。デフォルトでは色なしで出力されます。
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')[]
- デフォルト:
['setTimeout', 'clearTimeout', 'setImmediate', 'clearImmediate', 'setInterval', 'clearInterval', 'Date']
フェイク化するグローバルメソッドとAPIの名前の配列。
setTimeout()
とnextTick()
のみをモックするには、このプロパティを['setTimeout', 'nextTick']
として指定します。
--pool=forks
を使用してVitestをnode:child_process
内で実行している場合、nextTick
のモックはサポートされていません。NodeJSは内部でnode:child_process
でprocess.nextTick
を使用しており、モックされるとハングします。--pool=threads
でVitestを実行する場合、nextTick
のモックはサポートされています。
fakeTimers.loopLimit
- 型:
number
- デフォルト:
10_000
vi.runAllTimers()
を呼び出すときに実行されるタイマーの最大数。
fakeTimers.shouldAdvanceTime
- 型:
boolean
- デフォルト:
false
モックされた時間を実際のシステム時間のずれに基づいて自動的にインクリメントするように@sinonjs/fake-timersに指示します(例:実際のシステム時間で20ms変化するごとにモックされた時間が20msインクリメントされます)。
fakeTimers.advanceTimeDelta
- 型:
number
- デフォルト:
20
shouldAdvanceTime: true
で使用する場合のみ関連します。実際のシステム時間でadvanceTimeDelta ms変化するごとにモックされた時間をadvanceTimeDelta msインクリメントします。
fakeTimers.shouldClearNativeTimers
- 型:
boolean
- デフォルト:
false
フェイクタイマーに、それぞれのハンドラーに委譲して「ネイティブ」(つまり、フェイクでない)タイマーをクリアするように指示します。これらはデフォルトではクリアされないため、フェイクタイマーセッションを開始する前にタイマーが存在した場合、予期しない動作につながる可能性があります。
workspace * 1.1.0+
- 型:
string
- CLI:
--workspace=./file.js
- デフォルト: configファイルまたはrootに近い
vitest.{workspace,projects}.{js,ts,json}
isolate 1.1.0+
- 型:
boolean
- デフォルト:
true
- CLI:
--no-isolate
,--isolate=false
分離された環境でテストを実行します。このオプションは、vmThreads
およびvmForks
プールには影響しません。
コードが副作用に依存していない場合(通常、node
環境のプロジェクトでは当てはまります)、このオプションを無効にすると、パフォーマンスが向上する可能性があります。
ヒント
poolOptions
プロパティを使用すると、特定のプールに対して分離を無効にすることができます。
includeTaskLocation 1.4.0+
- 型:
boolean
- デフォルト:
false
リポーターでVitest APIがタスクを受信したときに、location
プロパティを含めるかどうか。テストが多い場合、これによりパフォーマンスがわずかに低下する可能性があります。
location
プロパティには、元のファイル内のtest
またはdescribe
の位置に対応するcolumn
とline
の値があります。
ヒント
このオプションは、これに依存するカスタムコードを使用しない場合は影響しません。
snapshotEnvironment 1.6.0+
- 型:
string
カスタムスナップショット環境実装へのパス。これは、Node.js APIをサポートしない環境でテストを実行している場合に役立ちます。このオプションはブラウザランナーには影響しません。
このオブジェクトはSnapshotEnvironment
の形状である必要があり、スナップショットファイルの解決と読み取り/書き込みに使用されます
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
を拡張できます。
警告
これはローレベルのオプションであり、デフォルトのNode.js APIにアクセスできない高度なケースでのみ使用する必要があります。
スナップショット機能を設定するだけであれば、snapshotFormat
またはresolveSnapshotPath
オプションを使用してください。