Skip to content
Vitest 0
Main Navigation PrzewodnikAPIKonfiguracjaZaawansowany
1.6.1
0.34.6

Polski

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

Polski

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

Wygląd

Sidebar Navigation

Przewodnik

Dlaczego Vitest

Wprowadzenie

Funkcje

Obszar roboczy

Interfejs Linii Poleceń

Filtrowanie Testów

Pokrycie kodu

Snapshot

Mockowanie

Testowanie Typów

Interfejs użytkownika Vitest

Tryb przeglądarki (eksperymentalny)

Testowanie w kodzie źródłowym

Kontekst Testowy

Środowisko Testowe

Rozszerzanie Matcherów

Integracje z IDE

Debugowanie

Porównania z innymi narzędziami do uruchamiania testów

Przewodnik migracji

Częste błędy

API

Dokumentacja API Testów

Funkcje Mockujące

Vi

expect

expectTypeOf

assertType

Konfiguracja

Konfiguracja Vitest

Na tej stronie

Funkcje ​

  • Konfiguracja, transformacje, resolwery i wtyczki Vite.
  • Użyj tej samej konfiguracji, co w Twojej aplikacji, aby uruchomić testy!
  • Inteligentny i natychmiastowy tryb obserwacji, działający jak HMR dla testów!
  • Testowanie komponentów dla Vue, React, Svelte, Lit i innych
  • Obsługa TypeScript / JSX od razu po wyjęciu z pudełka
  • ESM first, top level await
  • Wielowątkowość za pośrednictwem Workers Tinypool
  • Wsparcie dla benchmarków przy użyciu Tinybench
  • Filtrowanie, limity czasu, współbieżność dla zestawów testów i pojedynczych testów
  • Wsparcie dla Przestrzeni roboczych
  • Migawki kompatybilne z Jest
  • Wbudowane Chai do asercji oraz API kompatybilne z Jest expect
  • Wbudowany Tinyspy do mockowania
  • happy-dom lub jsdom do mockowania DOM
  • Pokrycie kodu za pośrednictwem v8 lub istanbul
  • Testowanie w kodzie źródłowym w stylu Rust
  • Testowanie typów za pośrednictwem expect-type
Dowiedz się, jak napisać swój pierwszy test z pomocą wideo

Wspólna konfiguracja dla testów, środowiska deweloperskiego i builda ​

Konfiguracja, transformacje, resolwery i wtyczki Vite. Użyj tej samej konfiguracji, co w Twojej aplikacji, aby uruchomić testy.

Dowiedz się więcej na Konfigurowanie Vitest.

Tryb obserwacji ​

bash
$ vitest

Kiedy modyfikujesz kod źródłowy lub pliki testowe, Vitest inteligentnie analizuje graf modułów i ponownie uruchamia tylko powiązane testy, działając jak HMR w Vite!

vitest uruchamia się w trybie obserwacji (watch mode) domyślnie w środowisku deweloperskim oraz w trybie uruchomienia (run mode) w środowisku CI (gdy obecna jest zmienna środowiskowa process.env.CI). Możesz użyć vitest watch lub vitest run, aby jawnie określić pożądany tryb.

Typowe idiomy webowe dostępne od razu ​

Obsługa ES Module / TypeScript / JSX / PostCSS od razu po wyjęciu z pudełka.

Wątki ​

Wielowątkowość za pośrednictwem Workers Tinypool (lekki fork Piscina), umożliwiająca równoczesne uruchamianie testów. Wątki są domyślnie włączone w Vitest i można je wyłączyć, przekazując flagę --no-threads w CLI.

Vitest izoluje również środowisko każdego pliku, więc zmiany w środowisku jednego pliku nie wpływają na inne. Izolację można wyłączyć, przekazując --no-isolate do CLI, co może wpłynąć na poprawność w zamian za wydajność uruchamiania.

Filtrowanie testów ​

Vitest oferuje wiele sposobów na zawężenie zakresu uruchamianych testów, co przyspiesza testowanie i pozwala skupić się na rozwoju.

Dowiedz się więcej o Filtrowaniu testów.

Uruchamianie testów współbieżnie ​

Użyj .concurrent w definicji testu, aby uruchomić go współbieżnie.

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

// Dwa testy oznaczone jako współbieżne zostaną uruchomione równolegle
describe('suite', () => {
  it('serial test', async () => {
    /* ... */
  });
  it.concurrent('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
});

Jeśli użyjesz .concurrent na zestawie testów (suite), każdy test w nim zostanie uruchomiony równolegle.

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

// Wszystkie testy w tym zestawie zostaną uruchomione równolegle
describe.concurrent('suite', () => {
  it('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 3', async ({ expect }) => {
    /* ... */
  });
});

Możesz także używać .skip, .only i .todo z współbieżnymi zestawami testów oraz testami. Przeczytaj więcej w Dokumentacji API.

WARNING

Podczas uruchamiania współbieżnych testów, migawki (Snapshots) i asercje (Assertions) muszą korzystać z expect z lokalnego Kontekstu testowego, aby zapewnić wykrycie właściwego testu.

Migawki ​

Wsparcie dla migawek kompatybilnych z Jest.

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

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

Dowiedz się więcej na Migawki.

Kompatybilność Chai i Jest expect ​

Chai jest wbudowany do asercji, a także API kompatybilne z Jest expect.

Zauważ, że jeśli korzystasz z bibliotek innych firm, które dodają własne matchery, ustawienie test.globals na true poprawi kompatybilność.

Mockowanie ​

Tinyspy jest wbudowany do mockowania z API kompatybilnym z jest dostępnym poprzez obiekt 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 => arg);

fn('world', 2);

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

Vitest obsługuje zarówno happy-dom, jak i jsdom do mockowania DOM i API przeglądarki. Nie są one dostarczane z Vitest, więc być może trzeba je zainstalować:

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

Następnie zmień opcję environment w pliku konfiguracyjnym:

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

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

Dowiedz się więcej na Mockowanie.

Pokrycie ​

Vitest obsługuje natywne pokrycie kodu za pośrednictwem v8 i instrumentowane pokrycie kodu za pośrednictwem istanbul.

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

Dowiedz się więcej na Pokrycie.

Testowanie w kodzie źródłowym ​

Vitest zapewnia również możliwość uruchamiania testów w kodzie źródłowym, obok implementacji, podobnie jak testy modułów w Rust.

Dzięki temu testy dzielą ten sam zakres (closure) co implementacje, co pozwala na testowanie stanów prywatnych bez ich eksportowania. Dodatkowo, skraca to cykl rozwoju.

ts
// src/index.ts

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

// zestawy testów w kodzie źródłowym
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);
  });
}

Dowiedz się więcej na Testowanie w kodzie źródłowym.

Benchmarking experimental ​

Od Vitest 0.23.0 możesz uruchamiać testy porównawcze (benchmark) przy użyciu funkcji bench z [Tinybench], aby porównać wydajność różnych rozwiązań.

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

Testowanie typów experimental ​

Od Vitest 0.25.0 możesz pisać testy, aby wychwytywać regresje typów. Vitest jest dostarczany z pakietem expect-type, aby zapewnić Ci podobne i łatwe do zrozumienia API.

ts
import { assertType, expectTypeOf } 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 is a string
  assertType(mount({ name: 42 }));
});
Pager
Poprzednia stronaWprowadzenie
Następna stronaObszar roboczy

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

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

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors