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

API

Node API

上級者向けAPI

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

プラグイン API

Runner API

レポーター

タスクのメタデータ

ガイド

テストの実行

レポーターの拡張

カスタムプール

Vitest の設定

テストAPIリファレンス

このページの内容

TestProject 3.0.0+ ​

WARNING

このガイドでは、Vitest の高度な Node.js API について説明します。単にプロジェクトを定義したい場合は、「テストプロジェクト」ガイドを参照してください。

name ​

name は、ユーザーが割り当てるか、Vitest が決定する一意の文字列です。ユーザーが名前を指定しなかった場合、Vitest はプロジェクトのルートにある package.json を読み込み、その name プロパティを取得しようとします。package.json が存在しない場合、Vitest はデフォルトでフォルダー名を使用します。インラインで定義されたプロジェクトの場合、名前には数字が使用されます(文字列に変換されます)。

ts
import { createVitest } from 'vitest/node';

const vitest = await createVitest('test');
vitest.projects.map(p => p.name) === ['@pkg/server', 'utils', '2', 'custom'];
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: [
      './packages/server', // "@pkg/server" を含む package.json がある
      './utils', // package.json ファイルがない
      {
        // 名前をカスタマイズしない
        test: {
          pool: 'threads',
        },
      },
      {
        // 名前をカスタマイズする
        test: {
          name: 'custom',
        },
      },
    ],
  },
});

INFO

ルートプロジェクトがユーザープロジェクトの一部でない場合、そのnameは解決されません。

vitest ​

vitest はグローバルな Vitest プロセスを参照します。

serializedConfig ​

これはテスト処理が受け取る設定です。Vitest は、シリアル化できないすべての関数やプロパティを削除して、手動で設定をシリアル化します。この値はテストとNode.jsの両方で利用できるため、その型はメインのエントリポイントからエクスポートされます。

ts
import type { SerializedConfig } from 'vitest';

const config: SerializedConfig = vitest.projects[0].serializedConfig;

WARNING

serializedConfig プロパティはゲッターです。アクセスされるたびに、Vitest は設定が変更された場合に備え、再度設定をシリアル化します。これは、常に異なる参照を返すことを意味します。

ts
project.serializedConfig === project.serializedConfig; // ❌

globalConfig ​

Vitest が初期化されたテスト設定です。これがルートプロジェクトの場合、globalConfig と config は同じオブジェクトを参照します。この設定は、coverage や reporters のようにプロジェクト単位では設定できない値に役立ちます。

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

vitest.config === vitest.projects[0].globalConfig;

config ​

これはプロジェクトの解決済みのテスト設定です。

hash 3.2.0+ ​

このプロジェクトの一意のハッシュ値です。この値は再実行時にも一貫性があります。

プロジェクトのルートとその名前に基づいています。ルートパスは異なる OS 間で一貫性がないため、ハッシュも異なります。

vite ​

これはプロジェクトの ViteDevServer です。すべてのプロジェクトは独自の Vite サーバーを持っています。

browser ​

この値は、テストがブラウザで実行されている場合にのみ設定されます。browser が有効になっているが、テストがまだ実行されていない場合、これは undefined になります。プロジェクトがブラウザテストをサポートしているかどうかを確認する必要がある場合は、project.isBrowserEnabled() メソッドを使用してください。

WARNING

ブラウザ API はより実験段階のものであり、SemVer に準拠していません。ブラウザ API は、他の API とは別に標準化されます。

provide ​

ts
function provide<T extends keyof ProvidedContext & string>(
  key: T,
  value: ProvidedContext[T]
): void;

config.provide フィールドに加えて、テストにカスタム値を提供する方法です。すべての値は保存される前に structuredClone で処理されますが、providedContext 自体の値はクローンされません。

ts
import { createVitest } from 'vitest/node';

const vitest = await createVitest('test');
const project = vitest.projects.find(p => p.name === 'custom');
project.provide('key', 'value');
await vitest.start();
ts
import { inject } from 'vitest';
const value = inject('key');

値は動的に提供できます。テストで提供された値は、次回の実行時に更新されます。

TIP

このメソッドは、パブリック API を使用できない場合にグローバル設定ファイルでも利用可能です。

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

getProvidedContext ​

ts
function getProvidedContext(): ProvidedContext;

これはコンテキストオブジェクトを返します。すべてのプロジェクトは、vitest.provide によって設定されたグローバルコンテキストも継承します。

ts
import { createVitest } from 'vitest/node';

const vitest = await createVitest('test');
vitest.provide('global', true);
const project = vitest.projects.find(p => p.name === 'custom');
project.provide('key', 'value');

// { global: true, key: 'value' }
const context = project.getProvidedContext();

TIP

プロジェクトコンテキストの値は、常にルートプロジェクトのコンテキストを上書きします。

createSpecification ​

ts
function createSpecification(
  moduleId: string,
  locations?: number[]
): TestSpecification;

vitest.runTestSpecifications で使用できるテスト仕様を作成します。仕様は、テストファイルを特定の project とテスト locations (オプション) にスコープします。テストロケーションは、ソースコードでテストが定義されている行です。ロケーションが提供されている場合、Vitest はそれらの行で定義されているテストのみを実行します。testNamePattern が定義されている場合、それも適用されることに注意してください。

ts
import { createVitest } from 'vitest/node';
import { resolve } from 'node:path/posix';

const vitest = await createVitest('test');
const project = vitest.projects[0];
const specification = project.createSpecification(
  resolve('./example.test.ts'),
  [20, 40] // オプションのテスト行
);
await vitest.runTestSpecifications([specification]);

WARNING

createSpecification は解決済みのモジュール ID を期待します。ファイルを自動解決したり、ファイルシステムに存在するかどうかをチェックしたりしません。

また、project.createSpecification は常に新しいインスタンスを返すことにも注意してください。

isRootProject ​

ts
function isRootProject(): boolean;

現在のプロジェクトがルートプロジェクトであるかどうかを確認します。vitest.getRootProject() を呼び出すことでもルートプロジェクトを取得できます。

globTestFiles ​

ts
function globTestFiles(filters?: string[]): {
  /**
   * フィルターに一致するテストファイル。
   */
  testFiles: string[];
  /**
   * フィルターに一致する型チェックテストファイル。`typecheck.enabled` が `true` でない限り、これは空になります。
   */
  typecheckTestFiles: string[];
};

すべてのテストファイルをグロブします。この関数は、通常のテストと型チェックテストを含むオブジェクトを返します。

このメソッドは filters を受け入れます。フィルターは、Vitest インスタンスの他のメソッドとは異なり、ファイルパスの一部のみを指定できます。

js
project.globTestFiles(['foo']); // ✅
project.globTestFiles(['basic/foo.js:10']); // ❌

TIP

Vitest は fast-glob を使用してテストファイルを検索します。test.dir、test.root、root、または process.cwd() が cwd オプションを定義します。

このメソッドはいくつかの設定オプションを考慮します。

  • test.include、test.exclude を使用して通常のテストファイルを検索
  • test.includeSource、test.exclude を使用してインソーステストを検索
  • test.typecheck.include、test.typecheck.exclude を使用して型チェックテストを検索

matchesTestGlob ​

ts
function matchesTestGlob(moduleId: string, source?: () => string): boolean;

このメソッドは、ファイルが通常のテストファイルであるかどうかをチェックします。検証には globTestFiles が使用するのと同じ設定プロパティを使用します。

このメソッドは、ソースコードである2番目のパラメータも受け入れます。これは、ファイルがインソーステストであるかどうかを検証するために使用されます。複数のプロジェクトに対してこのメソッドを複数回呼び出す場合は、ファイルを一度読み込んで直接渡すことをお勧めします。ファイルがテストファイルではないが、includeSource グロブに一致する場合、source が提供されない限り、Vitest はファイルを同期的に読み取ります。

ts
import { createVitest } from 'vitest/node';
import { resolve } from 'node:path/posix';

const vitest = await createVitest('test');
const project = vitest.projects[0];

project.matchesTestGlob(resolve('./basic.test.ts')); // true
project.matchesTestGlob(resolve('./basic.ts')); // false
project.matchesTestGlob(
  resolve('./basic.ts'),
  () => `
if (import.meta.vitest) {
  // ...
}
`
); // `includeSource` が設定されている場合は true

import ​

ts
function import<T>(moduleId: string): Promise<T>

Vite モジュールランナーを使用してファイルをインポートします。ファイルは、提供されたプロジェクトの設定で Vite によって変換され、別のコンテキストで実行されます。moduleId は config.root に対する相対パスになります。

DANGER

project.import は Vite のモジュールグラフを再利用するため、通常のインポートを使用して同じモジュールをインポートすると、異なるモジュールが返されます。

ts
import * as staticExample from './example.js';
const dynamicExample = await project.import('./example.js');

dynamicExample !== staticExample; // ✅

INFO

内部的には、Vitest はこのメソッドを使用してグローバルセットアップ、カスタムカバレッジプロバイダー、カスタムレポーターをインポートします。つまり、これらはすべて同じ Vite サーバーに属している限り、同じモジュールグラフを共有します。

onTestsRerun ​

ts
function onTestsRerun(cb: OnTestsRerunHandler): void;

これは project.vitest.onTestsRerun の省略形です。テストが再実行されるようにスケジュールされたとき(通常はファイルの変更による)、待機されるコールバックを受け入れます。

ts
project.onTestsRerun(specs => {
  console.log(specs);
});

isBrowserEnabled ​

ts
function isBrowserEnabled(): boolean;

このプロジェクトがブラウザでテストを実行する場合、true を返します。

close ​

ts
function close(): Promise<void>;

プロジェクトと関連するすべてのリソースを閉じます。これは一度だけ呼び出すことができます。クローズのプロミスは、サーバーが再起動するまでキャッシュされます。リソースが再度必要になった場合は、新しいプロジェクトを作成してください。

具体的には、このメソッドは Vite サーバーを閉じ、型チェッカーサービスを停止し、実行中の場合はブラウザを閉じ、ソースコードを保持する一時ディレクトリを削除し、提供されたコンテキストをリセットします。

Pager
前のページVitest API
次のページTestSpecification

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/api/test-project

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

Copyright (c) 2021-Present Vitest Team