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

執行器 API

報告器 API

任務中繼資料

指南

執行測試

擴展報告器

自訂 Pool

配置參考

測試 API 參考

本頁導覽

自訂 Pool ​

WARNING

這是一個進階且非常底層的 API。如果您只是想執行測試,您可能不需要這個。它主要由函式庫作者使用。

Vitest 在 Pool 中執行測試。預設情況下,有幾種 Pool:

  • threads 使用 node:worker_threads 執行測試(透過新的 worker context 提供隔離)
  • forks 使用 node:child_process 執行測試(透過新的 child_process.fork 程序提供隔離)
  • vmThreads 使用 node:worker_threads 執行測試(但隔離是透過 vm 模組而非新的 worker context 提供)
  • browser 使用瀏覽器提供者執行測試
  • typescript 對測試執行型別檢查

您可以透過指定檔案路徑來提供自己的 Pool:

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

export default defineConfig({
  test: {
    // 預設情況下,每個檔案都將使用自訂 Pool 執行
    pool: './my-custom-pool.ts',
    // 您可以使用 `poolOptions` 物件提供選項
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
  },
});

如果您需要在不同的 Pool 中執行測試,請使用 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 為空,則不會呼叫此方法。第一個參數是 TestSpecification 的陣列。在呼叫 runTests 之前,檔案會使用 sequencer 進行排序。同一個檔案可能(雖然機率很低)會出現兩次,但它總是會有不同的專案 - 這是透過 projects 設定實現的。

Vitest 將等待 runTests 執行完畢後才結束執行(即,它只會在 runTests 完成後發出 onFinished)。

如果您使用自訂 Pool,您將必須自行提供測試檔案及其執行結果 - 您可以參考 vitest.state(最重要的是 collectFiles 和 updateTasks)。Vitest 使用 @vitest/runner 套件中的 startTests 函式來執行此操作。

如果呼叫 vitest.collect 或透過 CLI 命令呼叫 vitest list,Vitest 將呼叫 collectTests。其運作方式與 runTests 相同,但您不必執行測試回調,只需透過呼叫 vitest.state.collectFiles(files) 回報任務狀態即可。

為了在不同程序之間進行通訊,您可以使用 vitest/node 中的 createMethodsRPC 建立方法物件,並使用您喜歡的任何通訊形式。例如,要將 WebSockets 與 birpc 一起使用,您可以這樣寫:

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 中看到一個從零開始建立的簡單 Pool 範例,它不執行測試,但將它們標記為已收集。

Pager
上一頁擴展報告器
下一頁配置參考

以 MIT 授權條款 發布。

版權所有 (c) 2021-Present Vitest Team

https://vitest.dev/advanced/pool

以 MIT 授權條款 發布。

版權所有 (c) 2021-Present Vitest Team