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

これは高度で非常に低レベルなAPIです。単にテストを実行したいだけであれば、おそらく必要ありません。主にライブラリの作者によって使用されます。

Vitestはプールを使用してテストを実行します。デフォルトでは、いくつかのプールが用意されています。

  • threads: node:worker_threads を使用してテストを実行します(新しいワーカーコンテキストによる分離を提供します)。
  • forks: node:child_process を使用してテストを実行します(新しい child_process.fork プロセスによる分離を提供します)。
  • vmThreads: node:worker_threads を使用してテストを実行します(ただし、新しいワーカーコンテキストではなく vm モジュールによる分離を提供します)。
  • browser: ブラウザプロバイダーを使用してテストを実行します。
  • typescript: テストの型チェックを実行します。

ファイルパスを指定することで、独自のプールを提供できます。

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

export default defineConfig({
  test: {
    // デフォルトでは、全てのファイルがカスタムプールで実行されます
    pool: './my-custom-pool.ts',
    // `poolOptions` オブジェクトを使用してオプションを提供できます
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
  },
});

異なるプールでテストを実行する必要がある場合は、projects 機能を使用してください。

ts
export default defineConfig({
  test: {
    projects: [
      {
        extends: true,
        test: {
          pool: 'threads',
        },
      },
    ],
  },
});

API ​

pool オプションで指定されたファイルは、Vitest インターフェースを最初の引数として受け入れる関数(非同期でも可)をエクスポートする必要があります。この関数は ProcessPool インターフェースに一致するオブジェクトを返す必要があります。

ts
import type { ProcessPool, TestSpecification } from 'vitest/node';

export interface ProcessPool {
  name: string;
  runTests: (
    files: TestSpecification[],
    invalidates?: string[]
  ) => Promise<void>;
  collectTests: (
    files: TestSpecification[],
    invalidates?: string[]
  ) => Promise<void>;
  close?: () => Promise<void>;
}

この関数は一度だけ呼び出されます(サーバー設定が更新されない限り)。通常、テストに必要なすべての初期化をこの関数内で行い、runTests が呼び出されたときに再利用するのが良いでしょう。

Vitestは新しいテストの実行がスケジュールされたときに runTests を呼び出します。files が空の場合は呼び出しません。最初の引数は TestSpecifications の配列です。runTests が呼び出される前に、ファイルは sequencer を使用してソートされます。同じファイルが2回含まれる可能性は低いですが、その場合でも常に異なるプロジェクトに属します。これは projects 設定を介して実装されています。

Vitestは実行を終了する前に runTests の完了を待ちます(つまり、runTests が解決された後にのみ onFinished を発行します)。

カスタムプールを使用する場合、テストファイルとその結果を自前で用意する必要があります。そのためには vitest.state を参照できます(特に collectFiles と updateTasks が重要です)。Vitestは @vitest/runner パッケージの startTests 関数を使ってこれを行います。

vitest.collect が呼び出された場合、またはCLIコマンドを介して vitest list が呼び出された場合、Vitestは collectTests を呼び出します。これは runTests と同じように機能しますが、テストコールバックを実行する必要はなく、vitest.state.collectFiles(files) を呼び出すことでタスクを報告するだけで済みます。

異なるプロセス間で通信するには、vitest/node から createMethodsRPC を使用してメソッドオブジェクトを作成し、任意の通信手段を利用できます。たとえば、birpc でWebSocketsを使用するには、次のように記述します。

ts
import { createBirpc } from 'birpc';
import { parse, stringify } from 'flatted';
import { createMethodsRPC, TestProject } from 'vitest/node';

function createRpc(project: TestProject, wss: WebSocketServer) {
  return createBirpc(createMethodsRPC(project), {
    post: msg => wss.send(msg),
    on: fn => wss.on('message', fn),
    serialize: stringify,
    deserialize: parse,
  });
}

テストを実行せずに収集済みとしてマークする、ゼロから作成されたプールの簡単な例は、pool/custom-pool.ts で確認できます。

Pager
前のページレポーターの拡張
次のページVitest の設定

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/pool

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

Copyright (c) 2021-Present Vitest Team