Skip to content
Vitest 1
Main Navigation PrůvodceAPIKonfiguracePokročilý
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

Pokročilý

Node API

Test Runner (Spouštěč testů)

Metadata úloh

Rozšíření reportérů

Vlastní pool

Na této stránce

Vlastní pool ​

WARNING

Toto je pokročilé API. Pokud pouze spouštíte testy, pravděpodobně ho nebudete potřebovat. Primárně je určeno pro autory knihoven.

Vitest spouští testy v poolech. Ve výchozím nastavení existuje několik 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 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í browser providerů
  • typescript: pro provádění kontroly typů na testech

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

ts
import { defineConfig } from 'vitest/config';
// ---cut---
export default defineConfig({
  test: {
    // ve výchozím nastavení spustí každý soubor s vlastním poolem
    pool: './my-custom-pool.ts',
    // můžete poskytnout možnosti pomocí objektu `poolOptions`
    poolOptions: {
      myCustomPool: {
        customProperty: true,
      },
    },
    // můžete také určit pool pro podmnožinu souborů
    poolMatchGlobs: [['**/*.custom.test.ts', './my-custom-pool.ts']],
  },
});

API ​

Soubor určený v možnosti pool by měl exportovat funkci (může být asynchronní), která jako první argument přijímá rozhraní Vitest. Tato funkce musí vrátit objekt, který odpovídá rozhraní 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>;
}

Funkce je volána pouze jednou (pokud se nezmění konfigurace serveru) a obvykle je vhodné inicializovat vše potřebné pro testy uvnitř této funkce. Poté ji znovu použijte, když je volána funkce runTests.

Vitest volá runTests, když jsou naplánovány nové testy ke spuštění. Nezavolá ji, pokud je pole files prázdné. Prvním argumentem je pole tuples: prvním prvkem je odkaz na workspace projekt a druhým prvkem je absolutní cesta k testovacímu souboru. Soubory jsou seřazeny pomocí sequencer před tím, než je volána runTests. Je možné (i když nepravděpodobné), že se stejný soubor objeví dvakrát, ale vždy bude mít jiný projekt - to je implementováno pomocí konfigurace vitest.workspace.ts.

Vitest počká, dokud nebude runTests dokončeno, než dokončí spuštění (tj. vysílá událost onFinished až po vyřešení runTests).

Pokud používáte vlastní pool, budete muset sami zajistit načtení testovacích souborů a zpracování jejich výsledků - můžete se odkazovat na vitest.state (nejdůležitější jsou collectFiles a updateTasks). Vitest používá funkci startTests z balíčku @vitest/runner k tomuto účelu.

Pro komunikaci mezi různými procesy můžete vytvořit metody pomocí createMethodsRPC z vitest/node a použít jakoukoli formu komunikace, kterou preferujete. Například pro použití WebSockets s birpc můžete napsat něco jako toto:

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

Abyste se ujistili, že jsou všechny testy shromážděny, zavolali byste ctx.state.collectFiles a nahlásili to Vitest reporterům:

ts
async function runTests(project: WorkspaceProject, tests: string[]) {
  // ... running tests, put into "files" and "tasks"
  const methods = createMethodsRPC(project);
  await methods.onCollected(files);
  // most reporters rely on results being updated in "onTaskUpdate"
  await methods.onTaskUpdate(tasks);
}

Jednoduchý příklad můžete vidět v pool/custom-pool.ts.

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

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

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

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors