Skip to content
Vitest 1
Main Navigation ガイドAPI設定高度な
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

高度な

Node 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';
// ---cut---
export default defineConfig({
  test: {
    // デフォルトでは、すべてのファイルをカスタムプールで実行します
    pool: './my-custom-pool.ts',
    // `poolOptions`オブジェクトを使用してオプションを指定できます
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
    // ファイルのサブセットに対してプールを指定することもできます
    poolMatchGlobs: [['**/*.custom.test.ts', './my-custom-pool.ts']],
  },
});

API ​

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

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

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

この関数は(サーバー設定が更新されない限り)一度だけ呼び出されます。一般的には、テストに必要なすべてのものをこの関数内で初期化し、runTestsが呼び出された際に再利用することをお勧めします。

Vitest は、新しいテストの実行がスケジュールされた場合にrunTestsを呼び出します。filesが空の場合、呼び出しは行われません。第一引数はタプルの配列で、最初の要素はワークスペースプロジェクトへの参照、2 番目の要素はテストファイルへの絶対パスです。ファイルは、runTestsが呼び出される前にsequencerを使用してソートされます。同じファイルが 2 回含まれる可能性もあります(まれですが)、常に異なるプロジェクトが関連付けられます。これはvitest.workspace.tsの設定によって実現されます。

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

カスタムプールを使用する場合は、テストファイルとその結果を自身で提供する必要があります。その場合、vitest.stateを参照してください(最も重要なのはcollectFilesとupdateTasksです)。Vitest は、@vitest/runnerパッケージのstartTests関数を使用してこれを行います。

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

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

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

すべてのテストを確実に収集するには、ctx.state.collectFilesを呼び出し、その結果を Vitest レポーターに通知します。

ts
async function runTests(project: WorkspaceProject, tests: string[]) {
  // ... テストを実行し、"files"と"tasks"に格納します
  const methods = createMethodsRPC(project);
  await methods.onCollected(files);
  // ほとんどのレポーターは"onTaskUpdate"による結果の更新に依存しています
  await methods.onTaskUpdate(tasks);
}

簡単な例は、pool/custom-pool.tsにあります。

Pager
前のページレポーターの拡張方法

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

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/pool

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

Copyright (c) 2024 Mithril Contributors