プラグイン API 3.1.0+
WARNING
これは高度な API です。単にテストを実行したいだけであれば、おそらく必要ありません。主にライブラリ開発者向けの API です。
このガイドは、Vite プラグインの利用経験があることを前提としています。
Vitest はバージョン 3.1 から、実験的な configureVitest
プラグインフックをサポートしています。この API に関するフィードバックは、GitHub でお待ちしております。
import type { Vite, VitestPluginContext } from 'vitest/node';
export function plugin(): Vite.Plugin {
return {
name: 'vitest:my-plugin',
configureVitest(context: VitestPluginContext) {
// ...
},
};
}
/// <reference types="vitest/config" />
import type { Plugin } from 'vite';
export function plugin(): Plugin {
return {
name: 'vitest:my-plugin',
transform() {
// ...
},
configureVitest(context) {
// ...
},
};
}
TypeScript
Vitest は、Vite の型定義を Vite
名前空間を介して再エクスポートしており、これによってバージョン同期を維持できます。ただし、Vite と Vitest の両方でプラグインを作成している場合は、vite
エントリポイントから Plugin
型を引き続き使用できます。configureVitest
が正しく拡張されるように、vitest/config
がどこかで参照されていることを確認してください。
/// <reference types="vitest/config" />
reporter.onInit
とは異なり、このフックは Vitest のライフサイクルの初期段階で実行され、coverage
や reporters
などの設定を変更できます。特に注目すべき点は、プラグインがグローバル設定ではなく、テストプロジェクト の設定内で定義されている場合に、そのテストプロジェクトからグローバル設定を操作できる点です。
コンテキスト
project
プラグインが関連付けられている現在のテストプロジェクト。
Browser Mode
ブラウザ機能を利用する場合、project.browser
フィールドはまだ設定されていません。代わりにreporter.onBrowserInit
イベントを使用してください。
vitest
グローバルなVitestインスタンス。vitest.config
プロパティを直接変更することで、グローバル設定を変更できます。
vitest.config.coverage.enabled = false;
vitest.config.reporters.push([['my-reporter', {}]]);
Config is Resolved
Vitest はすでに設定を解決しているため、一部の型は通常のユーザー設定とは異なる場合があります。これは、例えば setupFile
のように、一部のプロパティが再度解決されないことも意味します。新しいファイルを追加する場合は、まず解決しておく必要があります。
この時点ではレポーターはまだ作成されていないため、vitest.reporters
を変更しても上書きされてしまうため、効果がありません。独自のレポーターを注入する必要がある場合は、代わりに設定を変更してください。
injectTestProjects
function injectTestProjects(
config: TestProjectConfiguration | TestProjectConfiguration[]
): Promise<TestProject[]>;
このメソッドは、設定のグロブパターン、設定ファイルへのパス、またはインライン設定を受け入れます。解決済みのテストプロジェクト配列を返します。
// カスタムエイリアス付きの単一プロジェクトを注入
const newProjects = await injectTestProjects({
// `extends` を指定することで現在のプロジェクト設定を継承できます
// 既存の名前を持つプロジェクトは作成できない点に注意してください。
// そのため、カスタム名を定義するのが良い習慣です
extends: project.vite.config.configFile,
test: {
name: 'my-custom-alias',
alias: {
customAlias: resolve('./custom-path.js'),
},
},
});
Projects are Filtered
Vitest は設定解決中にプロジェクトをフィルタリングするため、ユーザーがフィルタを定義している場合、注入されたプロジェクトは、そのフィルタに一致しない限り解決されない可能性があります。vitest.config.project
オプションを更新することで、テストプロジェクトを常に含めるように設定できます。
vitest.config.project.push('my-project-name');
なお、これはinjectTestProjects
メソッドで注入したプロジェクトにのみ影響します。
Referencing the Current Config
ユーザー設定を維持したい場合は、extends
プロパティを指定することができます。他のすべてのプロパティは、ユーザーが定義した設定とマージされます。
プロジェクトの configFile
は、Vite の設定において project.vite.config.configFile
としてアクセスできます。
これは name
も継承される点に注意してください。Vitest は同じ名前の複数のプロジェクトを許可しないため、エラーが発生します。異なる名前を指定していることを確認してください。現在の名前は project.name
プロパティでアクセスでき、使用されているすべての名前は vitest.projects
配列で確認できます。