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リファレンス

このページの内容

テストの実行 ​

WARNING

このガイドでは、Node.js スクリプトを介してテストを実行するための高度な API の使用方法を説明します。単にテストを実行したい場合は、通常この内容は必要ありません。これは主にライブラリの作者が使用することを想定しています。

実験的な API を使用する場合は、破壊的変更が SemVer に従わない可能性があるため、Vitest のバージョンを固定してください。

Vitest は、テスト実行を開始するための2つのメソッドを提供しています。

  • startVitest: Vitest を起動し、必要なパッケージがインストールされていることを検証した後、すぐにテストを実行します。
  • createVitest: Vitest を起動するだけで、テストは実行しません。

startVitest ​

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

const vitest = await startVitest(
  'test',
  [], // CLI フィルター
  {}, // テスト設定を上書き
  {}, // Vite 設定を上書き
  {} // カスタム Vitest オプション
);
const testModules = vitest.state.getTestModules();
for (const testModule of testModules) {
  console.log(testModule.moduleId, testModule.ok() ? 'passed' : 'failed');
}

TIP

TestModule、TestSuite、および TestCase API は実験的なものではなく、Vitest 2.1 以降 SemVer に準拠しています。

createVitest ​

テストを実行せずに Vitest インスタンスを作成します。

createVitest メソッドは、必要なパッケージがインストールされていることを検証しません。また、config.standalone や config.mergeReports の設定も適用されません。watch が無効になっていても、Vitest は自動的に終了しません。

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

const vitest = await createVitest(
  'test',
  {}, // テスト設定を上書き
  {}, // Vite 設定を上書き
  {} // カスタム Vitest オプション
);

// `vitest.cancelCurrentRun()` が呼び出されたときに実行される
vitest.onCancel(() => {});
// `vitest.close()` 呼び出し中に実行される
vitest.onClose(() => {});
// Vitest がテストファイルを再実行するときに実行される
vitest.onTestsRerun(files => {});

try {
  // テストが失敗した場合、process.exitCode を 1 に設定しますが、
  // プロセスは自動的に閉じません。
  await vitest.start(['my-filter']);
} catch (err) {
  // これは以下のエラーをスローする可能性があります:
  // - ファイルが見つからなかった場合は "FilesNotFoundError"
  // - `--changed` でリポジトリが初期化されていない場合は "GitNotFoundError"
} finally {
  await vitest.close();
}

Vitest インスタンスを保持する予定がある場合は、少なくとも init を呼び出すようにしてください。これにより、レポーターとカバレッジプロバイダーが初期化されますが、テストは実行されません。Vitest のウォッチ機能を使用しない場合でも、インスタンスを実行し続けたい場合は、watch モードを有効にすることをお勧めします。Vitest は、一部の機能が継続的なプロセスで正しく動作するために、このフラグに依存しています。

レポーターの初期化後、手動でテストを実行する必要がある場合は、runTestSpecifications または rerunTestSpecifications を使用します。

ts
watcher.on('change', async file => {
  const specifications = vitest.getModuleSpecifications(file);
  if (specifications.length) {
    vitest.invalidateFile(file);
    // "reporter.onWatcher*" フックを呼び出したくない場合は、
    // runTestSpecifications を使用できます。
    await vitest.rerunTestSpecifications(specifications);
  }
});

WARNING

上記の例は、デフォルトのウォッチャー動作を無効にした場合のユースケースを示しています。デフォルトでは、Vitest はファイル変更時に自動的にテストを再実行します。

また、getModuleSpecifications は、globTestSpecifications によってすでに処理されていない限り、テストファイルを解決しないことに注意してください。新規作成されたファイルの場合は、代わりに project.matchesGlobPattern を使用してください。

ts
watcher.on('add', async file => {
  const specifications = [];
  for (const project of vitest.projects) {
    if (project.matchesGlobPattern(file)) {
      specifications.push(project.createSpecification(file));
    }
  }

  if (specifications.length) {
    await vitest.rerunTestSpecifications(specifications);
  }
});

ウォッチ機能を無効にする必要がある場合は、Vite 5.3 以降では server.watch: null を、または Vite 設定に server.watch: { ignored: ['*/*'] } を渡すことができます。

ts
await createVitest(
  'test',
  {},
  {
    plugins: [
      {
        name: 'stop-watcher',
        async configureServer(server) {
          await server.watcher.close();
        },
      },
    ],
    server: {
      watch: null,
    },
  }
);
Pager
前のページタスクのメタデータ
次のページレポーターの拡張

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/guide/tests

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

Copyright (c) 2021-Present Vitest Team