Skip to content
Vitest 2
Main Navigation PrůvodceAPIKonfiguraceRežim prohlížečePokročilý
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

Proč Vitest

Začínáme

Funkce

Workspace

Rozhraní příkazového řádku

Filtrování testů

Reportéři

Pokrytí

Snímky

Mockování

Testování typů

Vitest UI

Testování ve zdrojovém kódu

Kontext testu

Testovací prostředí

Rozšíření matcherů/porovnávačů

Integrace do IDE

Ladění

Srovnání s jinými testovacími nástroji

Průvodce migrací

Běžné chyby

Profiling Test Performance

Zvýšení výkonu

Na této stránce

Funkce ​

  • Konfigurace, transformátory, resolvátory a pluginy Vite
  • Použijte stejné nastavení jako ve vaší aplikaci pro spouštění testů!
  • Chytrý a okamžitý režim sledování, podobně jako HMR pro testy!
  • Testování komponent pro Vue, React, Svelte, Lit, Marko a další technologie
  • Nativní podpora TypeScriptu / JSX
  • ESM na prvním místě, top-level await
  • Vícevláknové zpracování pomocí Tinypool
  • Podpora benchmarkingu pomocí Tinybench
  • Filtrování, časové limity a souběžné spouštění pro sady a testy
  • Podpora pracovního prostoru
  • Jest-kompatibilní snapshoty
  • Chai je vestavěný pro aserce + Jest expect kompatibilní API
  • Tinyspy je vestavěný pro mocking
  • happy-dom nebo jsdom pro DOM mocking
  • Režim prohlížeče pro spouštění testů komponent v prohlížeči
  • Pokrytí kódu pomocí v8 nebo istanbul
  • In-source testování (podobné Rustu)
  • Testování typů pomocí expect-type
  • Podpora sharding
Naučte se napsat svůj první test pomocí videa

Sdílená konfigurace mezi testem, vývojem a sestavením ​

Vitest využívá konfiguraci, transformátory, resolvátory a pluginy Vite. Použijte stejné nastavení jako ve vaší aplikaci pro spouštění testů.

Více se dozvíte v Konfigurace Vitestu.

Režim sledování ​

bash
$ vitest

Když upravíte svůj zdrojový kód nebo testovací soubory, Vitest chytře prohledá graf modulů a znovu spustí pouze související testy, stejně jako funguje HMR ve Vite!

vitest se ve výchozím nastavení spouští v watch mode ve vývojovém prostředí a v run mode v CI prostředí (když je přítomno process.env.CI). Můžete použít vitest watch nebo vitest run k explicitnímu určení požadovaného režimu.

Spusťte Vitest s příznakem --standalone, aby běžel na pozadí. Nebude spouštět žádné testy, dokud se nezmění. Vitest nespustí testy při změně zdrojového kódu, dokud se nespustí test, který tento zdroj importuje.

Běžné webové idiomy ihned po vybalení ​

Nativní podpora ES modulů / TypeScriptu / JSX / PostCSS

Vlákna ​

Ve výchozím nastavení Vitest spouští testovací soubory ve více procesech pomocí node:child_process přes Tinypool (odlehčená odnož Piscina), což umožňuje souběžné spouštění testů. Pokud chcete svou testovací sadu ještě více urychlit, zvažte povolení --pool=threads pro spouštění testů pomocí node:worker_threads (mějte na paměti, že některé balíčky nemusí s tímto nastavením fungovat).

Pro spouštění testů v jednom vlákně nebo procesu viz poolOptions.

Vitest také izoluje prostředí každého souboru, takže mutace prostředí v jednom souboru neovlivňují ostatní. Izolaci lze zakázat předáním --no-isolate do CLI (na úkor správnosti pro vyšší výkon).

Filtrování testů ​

Vitest nabízí mnoho způsobů, jak zúžit spouštěné testy, aby se urychlilo testování a vy se mohli soustředit na vývoj.

Více se dozvíte o Filtrování testů.

Souběžné spouštění testů ​

Použijte .concurrent u jednotlivých testů pro jejich paralelní spuštění.

ts
import { describe, it } from 'vitest';

// Dva testy označené jako concurrent budou spuštěny paralelně
describe('suite', () => {
  it('serial test', async () => {
    /* ... */
  });
  it.concurrent('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
});

Pokud použijete .concurrent na sadu, každý test v ní bude spuštěn paralelně.

ts
import { describe, it } from 'vitest';

// Všechny testy v této sadě budou spuštěny paralelně
describe.concurrent('suite', () => {
  it('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 3', async ({ expect }) => {
    /* ... */
  });
});

Můžete také použít .skip, .only a .todo se souběžnými sadami a testy. Více se dozvíte v API referenci.

WARNING

Při spouštění souběžných testů je nutné, aby Snapshoty a Aserce používaly expect z lokálního Testovacího kontextu, aby bylo zajištěno, že je detekován správný test.

Snapshot ​

Podpora snapshotů kompatibilních s Jestem.

ts
import { expect, it } from 'vitest';

it('renders correctly', () => {
  const result = render();
  expect(result).toMatchSnapshot();
});

Více se dozvíte v Snapshot.

Kompatibilita Chai a Jest expect ​

Chai je vestavěný pro aserce a nabízí API Jest expect-kompatibilní.

Všimněte si, že pokud používáte knihovny třetích stran, které přidávají matchery, nastavení test.globals na true zajistí lepší kompatibilitu.

Mocking ​

Tinyspy je vestavěný pro mocking a nabízí jest-kompatibilní API na objektu vi.

ts
import { expect, vi } from 'vitest';

const fn = vi.fn();

fn('hello', 1);

expect(vi.isMockFunction(fn)).toBe(true);
expect(fn.mock.calls[0]).toEqual(['hello', 1]);

fn.mockImplementation((arg: string) => arg);

fn('world', 2);

expect(fn.mock.results[1].value).toBe('world');

Vitest podporuje jak happy-dom, tak jsdom pro DOM mocking a mocking API prohlížeče. Nejsou součástí Vitestu, budete je muset nainstalovat samostatně:

bash
$ npm i -D happy-dom
# nebo
$ npm i -D jsdom

Poté změňte možnost environment ve vašem konfiguračním souboru:

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

export default defineConfig({
  test: {
    environment: 'happy-dom', // nebo 'jsdom', 'node'
  },
});

Více se dozvíte v Mocking.

Pokrytí ​

Vitest podporuje nativní pokrytí kódu pomocí v8 a instrumentované pokrytí kódu pomocí istanbul.

json
{
  "scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
  }
}

Více se dozvíte v Pokrytí.

In-Source testování ​

Vitest také poskytuje způsob, jak spouštět testy uvnitř vašeho zdrojového kódu spolu s implementací, podobně jako modulové testy v Rustu.

Díky tomu testy sdílejí stejnou uzávěru jako implementace a umožňují testování soukromých stavů bez nutnosti exportu. Zároveň to také zkracuje cyklus zpětné vazby během vývoje.

ts
// src/index.ts

// implementace
export function add(...args: number[]): number {
  return args.reduce((a, b) => a + b, 0);
}

// in-source testovací sady
if (import.meta.vitest) {
  const { it, expect } = import.meta.vitest;
  it('add', () => {
    expect(add()).toBe(0);
    expect(add(1)).toBe(1);
    expect(add(1, 2, 3)).toBe(6);
  });
}

Více se dozvíte v In-source testování.

Benchmarking Experimentální ​

Můžete spouštět benchmark testy pomocí funkce bench a knihovny Tinybench pro porovnání výsledků výkonu.

ts
import { bench, describe } from 'vitest';

describe('sort', () => {
  bench('normal', () => {
    const x = [1, 5, 4, 2, 3];
    x.sort((a, b) => {
      return a - b;
    });
  });

  bench('reverse', () => {
    const x = [1, 5, 4, 2, 3];
    x.reverse().sort((a, b) => {
      return a - b;
    });
  });
});
Zpráva o benchmarkuZpráva o benchmarku

Testování typů Experimentální ​

Můžete psát testy pro odhalení regresí typů. Vitest obsahuje balíček expect-type, který poskytuje podobné a snadno srozumitelné API.

ts
import { assertType, expectTypeOf, test } from 'vitest';
import { mount } from './mount.js';

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction();
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>();

  // @ts-expect-error name musí být řetězec
  assertType(mount({ name: 42 }));
});

Sharding ​

Spouštějte testy na různých počítačích pomocí příznaků --shard a --reporter=blob. Všechny výsledky testů a pokrytí lze sloučit na konci vašeho CI pipeline pomocí příkazu --merge-reports:

bash
vitest --shard=1/2 --reporter=blob
vitest --shard=2/2 --reporter=blob
vitest --merge-reports --reporter=junit --coverage.reporter=text

Více informací naleznete v Zlepšení výkonu | Sharding.

Proměnné prostředí ​

Vitest automaticky načítá proměnné prostředí s prefixem VITE_ ze souborů .env, aby zachoval kompatibilitu s testy souvisejícími s frontendem, v souladu s již zavedenou konvencí Vite. Chcete-li načíst všechny proměnné prostředí ze souborů .env, můžete použít metodu loadEnv importovanou z vite:

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

export default defineConfig(({ mode }) => ({
  test: {
    // mode definuje, který soubor ".env.{mode}" vybrat, pokud existuje
    env: loadEnv(mode, process.cwd(), ''),
  },
}));
Pager
Předchozí stránkaZačínáme
Další stránkaWorkspace

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

https://v2.vitest.dev/guide/features

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors