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

Úvod

Proč Vitest

Začínáme

Funkce

Konfigurace Vitestu

API

Testovací reference API

Mockovací funkce

Vi

expect

expectTypeOf

assert

assertType

Průvodce

Rozhraní příkazového řádku

Filtrování testů

Testovací projekty

Generátory zpráv

Pokrytí kódu

Snímky

Mockování

Paralelní zpracování

Typové testování

Vitest UI

Testování přímo ve zdrojovém kódu

Testovací kontext

Anotace testů

Testovací prostředí

Rozšíření matcherů

Integrace s IDE

Ladění

Běžné chyby

Průvodce migrací

Migrace na Vitest 3.0

Migrace z Jest

Výkon

Profilování výkonu testů

Zlepšení výkonu

Režim prohlížeče

Rozšířené API

Srovnání

Na této stránce

Vitest 3.2 je vydán! ​

2. června 2025

Vitest 3.2 Announcement Cover Image

Vitest 3.2 se zaměřuje na vylepšení režimu prohlížeče a podporu TypeScriptu. Tato verze také obsahuje některé nové užitečné metody, možnosti konfigurace a nahrazuje konfiguraci workspace možností projects.

workspace je zastaralý ​

Ve snaze zjednodušit konfiguraci se tým rozhodl upustit od samostatného souboru vitest.workspace a doporučit používat pouze možnost projects v kořenové konfiguraci. To také zjednodušuje konfiguraci globálních možností (protože nemusíte hádat, jak přidat reportéry, když nemáte kořenovou konfiguraci).

Také jsme se rozhodli upustit od názvu workspace, protože koliduje s jinými nástroji, jako je PNPM, které poskytují podporu monorepo prostřednictvím této možnosti. Vitest nespouští tyto projekty s odděleným CWD a zachází s nimi spíše jako s dílčími instancemi Vitestu. Také nám to dává více prostoru pro nalezení lepšího řešení pro monorepos, aniž bychom narušili stávající funkčnost.

Tato možnost bude v budoucí hlavní verzi zcela odstraněna a nahrazena projects. Do té doby Vitest vytiskne varování, pokud je použita funkce workspace.

ts
import { defineConfig } from "vitest/config";
export default defineConfig({
  test: {
    // "test.workspace" je nyní "test.projects"
    workspace: [ 
    projects: [ 
      { test: { name: "Unit" } },
      { test: { name: "Integration" } },
    ],
  },
});

Anotační API ​

Nové anotační API vám umožňuje anotovat jakýkoli test vlastní zprávou a přílohou. Tyto anotace jsou viditelné v uživatelském rozhraní, HTML, JUnit, TAP a reportérech GitHub Actions. Vitest také vytiskne související anotaci v CLI, pokud test selže.

Scoped Fixtures ​

Fixtures test.extend nyní mohou specifikovat možnost scope: buď file nebo worker.

ts
const test = baseTest.extend({
  db: [
    async ({}, use) => {
      // ...nastavení
      await use(db);
      await db.close();
    },
    { scope: 'worker' },
  ],
});

Fixture souboru je podobná použití beforeAll a afterAll na úrovni souboru, ale nebude volána, pokud fixture není použita v žádném testu.

Fixture worker je inicializována jednou na worker, ale mějte na paměti, že Vitest ve výchozím nastavení vytváří jednoho workeru pro každý test, takže musíte deaktivovat izolaci, abyste z toho měli prospěch.

Vlastní barvy názvů projektů ​

Nyní můžete nastavit vlastní barvu při použití projects:

Příklad konfigurace
ts
export default defineConfig({
  test: {
    projects: [
      {
        test: {
          name: {
            label: 'unit',
            color: 'red',
          },
        },
      },
      {
        test: {
          name: {
            label: 'browser',
            color: 'green',
          },
          browser: {
            enabled: true,
            provider: 'playwright',
            instances: [{ browser: 'chromium' }],
          },
        },
      },
    ],
  },
})

Custom Browser Locators API ​

Vestavěné lokátory nemusí stačit k vyjádření potřeb vaší aplikace. Místo toho, abyste se vraceli k CSS a ztráceli ochranu proti opakování, kterou Vitest poskytuje prostřednictvím svého locator API, nyní doporučujeme rozšířit lokátory pomocí nového locators.extend API.

ts
import { locators } from '@vitest/browser/context';

locators.extend({
  getByCommentsCount(count: number) {
    return `.comments :text("${count} comments")`;
  },
});

Vraťte Playwright locator string pro vytvoření nového lokátoru. Všimněte si, že řetězec vrácený touto metodou bude vázán na rodičovský lokátor, pokud existuje.

Nyní můžete volat getByCommentsCount na page nebo jakémkoli jiném lokátoru přímo:

ts
await expect.element(page.getByCommentsCount(1)).toBeVisible();
await expect
  .element(
    page.getByRole('article', { name: 'Hello World' }).getByCommentsCount(1)
  )
  .toBeVisible();

Pokud tato metoda vrátí řetězec, pak se návratová hodnota převede na lokátor, takže ji můžete řetězit dál:

ts
page
  .getByRole('article', { name: 'Hello World' })
  .getByCommentsCount(1)
  .getByText('comments');

Tato metoda má přístup k aktuálnímu kontextu lokátoru, pokud existuje (pokud je metoda volána na page, pak kontext odkazuje na page), takže můžete řetězit všechny metody lokátoru uvnitř:

ts
import { locators } from '@vitest/browser/context';
import type { Locator } from '@vitest/browser/context';

locators.extend({
  getByCommentsCount(this: Locator, count: number) {
    return this.getByRole('comment').and(this.getByText(`${count} comments`));
  },
});

Přístup ke kontextu vám také umožňuje volat běžné metody lokátoru pro definování vlastní uživatelské události:

ts
import { locators, page } from '@vitest/browser/context';
import type { Locator } from '@vitest/browser/context';

locators.extend({
  clickAndFill(this: Locator, text: string) {
    await this.click();
    await this.fill(text);
  },
});

await page.getByRole('textbox').clickAndFill('Hello World');

Další informace naleznete v locators.extend API.

Explicitní správa zdrojů v vi.spyOn a vi.fn ​

V prostředích, která podporují Explicit Resource Management, můžete použít using namísto const k automatickému volání mockRestore u jakékoli mockované funkce při opuštění obsahujícího bloku. To je obzvláště užitečné pro špehované metody:

ts
it('calls console.log', () => {
  using spy = vi.spyOn(console, 'log').mockImplementation(() => {})
  debug('message')
  expect(spy).toHaveBeenCalled()
})

// console.log je zde obnoven

Test signal API ​

Vitest nyní poskytuje objekt AbortSignal tělu testu. Můžete jej použít k zastavení jakéhokoli zdroje, který podporuje toto Web API.

Signál je zrušen, když test vyprší časový limit, jiný test selže a --bail flag je nastaven na nenulovou hodnotu, nebo uživatel stiskne Ctrl+C v terminálu.

Například můžete zastavit požadavek fetch, když jsou testy přerušeny:

ts
it('stop request when test times out', async ({ signal }) => {
  await fetch('/heavy-resource', { signal });
}, 2000);

Pokrytí V8 AST-aware remapping ​

Vitest nyní používá balíček ast-v8-to-istanbul vyvinutý jedním z udržovatelů Vitestu, AriPerkkio. To přináší zprávu o pokrytí v8 do souladu s istanbul, ale má lepší výkon! Tuto funkci povolíte nastavením coverage.experimentalAstAwareRemapping na true.

Plánujeme, aby se toto stalo výchozím režimem přemapování v příští hlavní verzi. Starý v8-to-istanbul bude zcela odstraněn. Neváhejte se připojit k diskusi na https://github.com/vitest-dev/vitest/issues/7928.

Možnost watchTriggerPatterns ​

Při úpravě souboru je Vitest dostatečně inteligentní, aby znovu spustil jen testy, které tento soubor importují. Bohužel, statická analýza Vitestu bere v úvahu pouze statické a dynamické příkazy import. Pokud čtete soubor nebo spouštíte samostatný proces, Vitest bude ignorovat změny v souvisejících souborech.

Pomocí možnosti watchTriggerPatterns můžete konfigurovat, které testy se mají znovu spustit podle změněného souboru. Například, chcete-li vždy znovu spustit testy mailers, když je změněna šablona, přidejte vzor spouštěče:

ts
export default defineConfig({
  test: {
    watchTriggerPatterns: [
      {
        pattern: /^src\/templates\/(.*)\.(ts|html|txt)$/,
        testsToRun: (file, match) => {
          return `api/tests/mailers/${match[2]}.test.ts`;
        },
      },
    ],
  },
});

Nový víceúčelový typ Matchers ​

Vitest nyní disponuje typem Matchers, který můžete rozšířit pro přidání typové podpory pro všechny vaše vlastní matchery na jednom místě. Tento typ pokrývá všechny tyto případy použití:

  • expect().to*
  • expect.to*
  • expect.extend({ to* })

Například, pro typově bezpečný porovnávač toBeFoo, můžete napsat něco takového:

ts
import { expect } from 'vitest';

interface CustomMatchers<R = unknown> {
  toBeFoo: (arg: string) => R;
}

declare module 'vitest' {
  interface Matchers<T = any> extends CustomMatchers<T> {}
}

expect.extend({
  toBeFoo(actual, arg) {
    //            ^?
    // ... implementace
    return {
      pass: true,
      message: () => '',
    };
  },
});

expect('foo').toBeFoo('foo');
expect.toBeFoo('foo');

sequence.groupOrder ​

Nová možnost sequence.groupOrder řídí pořadí, ve kterém projekty spouštějí své testy při použití více projektů.

  • Projekty se stejným číslem pořadí skupiny se spustí společně a skupiny se spouštějí od nejnižšího čísla po nejvyšší.
  • Pokud tuto možnost nezadáte, všechny projekty se spustí paralelně.
  • Pokud několik projektů používá stejné pořadí skupiny, budou spuštěny současně.
Příklad

Zde je příklad:

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

export default defineConfig({
  test: {
    projects: [
      {
        test: {
          name: 'slow',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'fast',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'flaky',
          sequence: {
            groupOrder: 1,
          },
        },
      },
    ],
  },
});

Testy v těchto projektech se provedou v následujícím pořadí:

 0. slow  |
          |> běží současně
 0. fast  |

 1. flaky |> běží po dokončení slow a fast, samostatně

Kompletní seznam změn naleznete v Vitest 3.2 Changelog.

Pager
Další stránkaProč Vitest

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/blog/vitest-3-2

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team