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

Spouštění testů ​

WARNING

Tato příručka vysvětluje, jak používat pokročilé API ke spouštění testů pomocí skriptu Node.js. Pokud chcete pouze spouštět testy, pravděpodobně ji nepotřebujete. Je určena především pro autory knihoven.

Zásadní změny nemusí dodržovat SemVer, proto při používání experimentálního API prosím zafixujte verzi Vitestu.

Vitest nabízí dvě metody pro svou inicializaci:

  • startVitest inicializuje Vitest, ověří instalaci balíčků a okamžitě spustí testy.
  • createVitest pouze inicializuje Vitest, aniž by spouštěl testy.

startVitest ​

ts
import { startVitest } from 'vitest/node';

const vitest = await startVitest(
  'test',
  [], // CLI filtry
  {}, // přepsat testovací konfiguraci
  {}, // přepsat konfiguraci Vite
  {} // vlastní nastavení Vitestu
);
const testModules = vitest.state.getTestModules();
for (const testModule of testModules) {
  console.log(testModule.moduleId, testModule.ok() ? 'passed' : 'failed');
}

TIP

Rozhraní TestModule, TestSuite a TestCase nejsou experimentální a od verze Vitest 2.1 dodržují SemVer.

createVitest ​

Vytváří instanci Vitest, aniž by spouštěl testy.

Metoda createVitest neověřuje instalaci požadovaných balíčků. Rovněž nerespektuje config.standalone ani config.mergeReports. Vitest se automaticky neukončí, ani když je watch zakázán.

ts
import { createVitest } from 'vitest/node';

const vitest = await createVitest(
  'test',
  {}, // přepsat testovací konfiguraci
  {}, // přepsat konfiguraci Vite
  {} // vlastní nastavení Vitestu
);

// voláno při zavolání `vitest.cancelCurrentRun()`
vitest.onCancel(() => {});
// voláno během `vitest.close()`
vitest.onClose(() => {});
// voláno, když Vitest znovu spouští testovací soubory
vitest.onTestsRerun(files => {});

try {
  // toto nastaví process.exitCode na 1 v případě selhání testů,
  // a proces se automaticky neuzavře
  await vitest.start(['my-filter']);
} catch (err) {
  // toto může vyhodit výjimku
  // "FilesNotFoundError", pokud nebyly nalezeny žádné soubory
  // "GitNotFoundError" s `--changed` a repozitář není inicializován
} finally {
  await vitest.close();
}

Pokud plánujete zachovat instanci Vitest, ujistěte se, že alespoň zavoláte init. Tím se inicializují reportéry a nástroj pro pokrytí kódu, ale testy se nespustí. Doporučuje se také povolit režim watch, i když nemáte v úmyslu používat sledování změn v Vitestu, ale chcete, aby instance zůstala spuštěná. Vitest se na tento příznak spoléhá pro správnou funkci některých svých vlastností v nepřetržitém procesu.

Po inicializaci reportérů použijte runTestSpecifications nebo rerunTestSpecifications pro ruční spuštění testů, pokud je to nutné:

ts
watcher.on('change', async file => {
  const specifications = vitest.getModuleSpecifications(file);
  if (specifications.length) {
    vitest.invalidateFile(file);
    // můžete použít runTestSpecifications, pokud by se neměly spouštět
    // háčky "reporter.onWatcher*"
    await vitest.rerunTestSpecifications(specifications);
  }
});

WARNING

Výše uvedený příklad ukazuje potenciální scénář použití, pokud zakážete výchozí chování watcheru. Ve výchozím nastavení Vitest již testy znovu spouští, pokud se soubory změní.

Pozor také na to, že getModuleSpecifications nenajde testovací soubory, pokud již nebyly zpracovány globTestSpecifications. Pokud byl soubor nově vytvořen, použijte místo toho project.matchesGlobPattern:

ts
watcher.on('add', async file => {
  const specifications = [];
  for (const project of vitest.projects) {
    if (project.matchesGlobPattern(file)) {
      specifications.push(project.createSpecification(file));
    }
  }

  if (specifications.length) {
    await vitest.rerunTestSpecifications(specifications);
  }
});

Pokud potřebujete zakázat watcher, můžete od Vite 5.3 předat server.watch: null nebo server.watch: { ignored: ['*/*'] } do konfigurace Vite:

ts
await createVitest(
  'test',
  {},
  {
    plugins: [
      {
        name: 'stop-watcher',
        async configureServer(server) {
          await server.watcher.close();
        },
      },
    ],
    server: {
      watch: null,
    },
  }
);
Pager
Předchozí stránkaMetadata úloh
Další stránkaRozšíření reportérů

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/advanced/guide/tests

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team