Skip to content
Vitest 3
Main Navigation Průvodce & APIKonfiguraceRežim prohlížečePokročilé API
3.2.0
2.1.9
1.6.1
0.34.6

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

čeština

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
magyar

Vzhled

Sidebar Navigation

API

Node API

Rozšířené API

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

Plugin API

Runner API

Reportéry

Metadata úloh

Průvodce

Spouštění testů

Rozšíření reportérů

Vlastní pool

Konfigurace Vitestu

Testovací reference API

Na této stránce

Vlastní pool ​

WARNING

Toto je pokročilé nízkoúrovňové API. Pokud chcete pouze spouštět testy, pravděpodobně ho nepotřebujete. Používají ho především tvůrci knihoven.

Vitest spouští testy v poolech. Ve výchozím nastavení existuje několik předdefinovaných poolů:

  • threads pro spouštění testů pomocí node:worker_threads (izolace je zajištěna novým kontextem workeru)
  • forks pro spouštění testů pomocí node:child_process (izolace je zajištěna novým procesem vytvořeným pomocí child_process.fork)
  • vmThreads pro spouštění testů pomocí node:worker_threads (ale izolace je zajištěna modulem vm namísto nového kontextu workeru)
  • browser pro spouštění testů pomocí poskytovatelů prohlížečů
  • typescript pro kontrolu typů v testech

Můžete definovat svůj vlastní pool zadáním cesty k souboru:

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

export default defineConfig({
  test: {
    // ve výchozím nastavení spustí každý soubor s vlastním poolem
    pool: './my-custom-pool.ts',
    // možnosti můžete nastavit pomocí objektu `poolOptions`
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
  },
});

Pokud potřebujete spouštět testy v různých poolech, použijte funkci projects:

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

API ​

Soubor specifikovaný v možnosti pool by měl exportovat (asynchronní) funkci, která jako svůj první argument přijímá rozhraní Vitest. Tato funkce musí vrátit objekt implementující rozhraní 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>;
}

Tato funkce je volána pouze jednou (pokud nebyla aktualizována konfigurace serveru). Obecně je dobré inicializovat vše, co potřebujete pro testy, uvnitř této funkce a znovu to použít při volání runTests.

Vitest volá runTests, když jsou naplánovány nové testy k provedení. Nebude ji volat, pokud je pole files prázdné. Prvním argumentem je pole TestSpecifications. Soubory jsou seřazeny pomocí sequencer před voláním runTests. Může se stát (i když je to nepravděpodobné), že stejný soubor bude uveden dvakrát, ale vždy bude patřit k jinému projektu – to je implementováno pomocí konfigurace projects.

Vitest počká, dokud se runTests nedokončí, než dokončí běh (tj. onFinished se vyvolá až po vyřešení runTests).

Při použití vlastního poolu musíte sami zajistit zpracování testovacích souborů a jejich výsledků – můžete se odkazovat na vitest.state (nejdůležitější metody jsou collectFiles a updateTasks). Vitest k tomu používá funkci startTests z balíčku @vitest/runner.

Vitest zavolá collectTests, pokud je volána vitest.collect nebo je vyvolán vitest list pomocí příkazu CLI. Funguje to stejně jako runTests, ale nemusíte spouštět testovací funkce, pouze hlásit jejich úkoly voláním vitest.state.collectFiles(files).

Pro komunikaci mezi procesy můžete vytvořit objekt s metodami pomocí createMethodsRPC z balíčku vitest/node a použít jakoukoli preferovanou formu komunikace. Například pro použití WebSockets s birpc můžete napsat něco takového:

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,
  });
}

Jednoduchý příklad poolu vytvořeného od základu, který nespouští testy, ale označuje je jako sebrané, naleznete v pool/custom-pool.ts.

Pager
Předchozí stránkaRozšíření reportérů
Další stránkaKonfigurace Vitestu

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/pool

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team