Skip to content
Vitest 3
Main Navigation Útmutató & APIKonfigurációBöngésző módHaladó API
3.2.0
2.1.9
1.6.1
0.34.6

magyar

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

magyar

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

Megjelenés

Sidebar Navigation

Bevezetés

Miért Vitest

Első lépések

Jellemzők

Vitest konfigurálása

API

Teszt API Referencia

Mock Függvények

Vi

expect

expectTypeOf

assert

assertType

Útmutató

Parancssori felület

Teszt szűrés

Tesztprojektek

Jelentéskészítők (Reporters)

Kódlefedettség

Snapshot

Mockolás

Párhuzamos végrehajtás

Típusok Tesztelése

Vitest UI

Forráskódba ágyazott tesztelés

Tesztkörnyezet

Teszt annotációk

Tesztkörnyezet

Matcherek kiterjesztése

IDE Integrációk

Hibakeresés

Gyakori hibák

Migrációs útmutató

Migrálás a Vitest 3.0-ra

Migrálás Jesstről

Teljesítmény

Teszt teljesítmény profilozása

Teljesítmény javítása

Böngésző üzemmód

Haladó API

Összehasonlítás más tesztfuttatókkal

Ezen az oldalon

Megjelent a Vitest 3.2! ​

2025. június 2.

Vitest 3.2 bejelentés borítóképe

A Vitest 3.2 a böngészőmód és a TypeScript-támogatás fejlesztésére összpontosít. Ez a kiadás néhány új, hasznos metódust és konfigurációs opciót is tartalmaz, továbbá a workspace konfigurációt a projects opció javára elavulttá teszi.

A workspace elavult ​

A konfiguráció egyszerűsítése érdekében a csapat úgy döntött, hogy elavulttá teszi a különálló vitest.workspace fájlt, és azt javasolja, hogy csak a projects opciót használják a gyökérkonfigurációban. Ez a globális opciók konfigurálását is leegyszerűsíti (mivel nem kell kitalálni, hogyan adjunk hozzá riportolókat, ha nincs gyökérkonfiguráció).

Azt is úgy döntöttünk, hogy elavulttá tesszük a workspace nevet, mert ütközik más eszközökkel, mint például a PNPM, amelyek szintén ezzel az opcióval biztosítanak monorepo támogatást. A Vitest nem futtatja ezeket a projekteket külön CWD-vel, hanem inkább al-Vitest projektekként kezeli őket. Ez lehetőséget ad arra, hogy jobb megoldást találjunk a monorepókra anélkül, hogy mások működését megzavarnánk.

Ez az opció egy jövőbeli főverzióban teljesen eltávolításra kerül, és a projects váltja fel. Addig is a Vitest figyelmeztetést fog kiírni, ha a workspace funkciót használják.

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

Annotációs API ​

Az új annotációs API lehetővé teszi, hogy bármely tesztet egyéni üzenettel és melléklettel annotáljon. Ezek az annotációk láthatók a felhasználói felületen, HTML-ben, junit, tap és GitHub Actions riportolókban. A Vitest a kapcsolódó annotációt a CLI-ben is megjeleníti, ha a teszt sikertelen.

Hatókörrel rendelkező Fixture-ök ​

A test.extend fixture-ök mostantól megadhatják a scope opciót: file vagy worker.

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

A fájl fixture hasonló a beforeAll és afterAll használatához a fájl gyökerében, de nem hívódik meg, ha a fixture-t egyetlen tesztben sem használják.

A worker fixture worker scope-onként egyszer inicializálódik, de vegye figyelembe, hogy alapértelmezés szerint a Vitest minden teszthez egy munkavégzőt hoz létre, ezért le kell tiltania az izolációt, hogy kihasználhassa a benne rejlő előnyöket.

Egyéni projektnevek színei ​

Mostantól egyéni színt állíthat be a projects használatakor:

Konfigurációs példa
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' }],
          },
        },
      },
    ],
  },
})

Egyéni böngésző locator API ​

A beépített locatorok nem feltétlenül elegendőek az alkalmazás igényeinek kielégítésére. Ahelyett, hogy CSS-t használnánk, és elveszítenénk az újrafuttathatósági védelmet, amelyet a Vitest a locator API-ján keresztül biztosít, most azt javasoljuk, hogy bővítsük a locatorokat az új locators.extend API használatával.

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

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

Adjon vissza egy Playwright locator stringet egy új locator létrehozásához. Vegye figyelembe, hogy az ebből a metódusból visszaadott string a szülő locatorra lesz hatókörözve, amennyiben létezik.

Mostantól közvetlenül hívhatja a getByCommentsCount metódust a page-en vagy bármely más locatoron:

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

Ha ez a metódus stringet ad vissza, akkor a visszatérési érték locatorrá konvertálódik, így folytathatja a láncolást:

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

Ez a metódus hozzáfér az aktuális locator kontextushoz (ha a metódust a page-en hívják, akkor a kontextus a page-re fog hivatkozni), így az összes locator metódust láncolhatja:

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

A kontextushoz való hozzáférés lehetővé teszi a locator szokásos metódusainak hívását is egy egyéni felhasználói esemény definiálásához:

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

További információkért tekintse meg a locators.extend API-t.

Explicit erőforrás-kezelés a vi.spyOn és vi.fn metódusokban ​

Azokban a környezetekben, amelyek támogatják az Explicit erőforrás-kezelést, a using kulcsszót használhatja a const helyett, hogy automatikusan meghívja a mockRestore metódust bármely mockolt függvényen, amikor a tartalmazó blokk kilép. Ez különösen hasznos a spy-olt metódusok esetében:

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

// a console.log itt visszaállítódik

Teszt signal API ​

A Vitest mostantól egy AbortSignal objektumot biztosít a teszt törzsének. Ezt használhatja bármely erőforrás leállítására, amely támogatja ezt a Web API-t.

A jel megszakad, ha a teszt időtúllép, egy másik teszt sikertelen, és a --bail flag nem nulla értékre van állítva, vagy a felhasználó megnyomja a Ctrl+C billentyűkombinációt a terminálban.

Például leállíthat egy fetch kérést, ha a tesztek megszakadnak:

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

Lefedettség V8 AST-alapú átképezése ​

A Vitest mostantól az ast-v8-to-istanbul csomagot használja, amelyet a Vitest egyik karbantartója, AriPerkkio fejlesztett ki. Ez a v8 lefedettségi riportot az istanbullal kompatibilissé teszi, miközben jobb teljesítményt nyújt! Engedélyezze ezt a funkciót a coverage.experimentalAstAwareRemapping true értékre állításával.

Azt tervezzük, hogy ez lesz az alapértelmezett átképezési mód a következő főverzióban. A régi v8-to-istanbul teljesen eltávolításra kerül. Nyugodtan csatlakozzon a vitához a https://github.com/vitest-dev/vitest/issues/7928 címen.

watchTriggerPatterns opció ​

Amikor szerkeszt egy fájlt, a Vitest intelligensen csak azokat a teszteket futtatja újra, amelyek importálják ezt a fájlt. Sajnos a Vitest statikus elemzése csak a statikus és dinamikus import utasításokat veszi figyelembe. Ha egy fájl olvasása vagy külön folyamat indítása történik, a Vitest figyelmen kívül hagyja a kapcsolódó fájlok változásait.

A watchTriggerPatterns opcióval konfigurálhatja, hogy mely teszteket futtassa újra a megváltozott fájltól függően. Például, a mailers tesztek mindig újra futtatásához, amikor egy sablon megváltozik, adjon hozzá egy trigger mintát:

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

Az új, többféle célra használható Matchers típus ​

A Vitest mostantól rendelkezik egy Matchers típussal, amelyet kiterjeszthet, hogy egy helyen biztosítsa a típus támogatását az összes egyéni matcheréhez. Ez a típus az összes alábbi felhasználási esetre vonatkozik:

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

Például, egy típusbiztos toBeFoo matcherhez valami ilyesmit írhat:

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) {
    //            ^?
    // ... implementáció
    return {
      pass: true,
      message: () => '',
    };
  },
});

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

sequence.groupOrder ​

Az új sequence.groupOrder opció szabályozza a tesztek futtatási sorrendjét több projekt használatakor.

  • Az azonos csoportrendezési számmal rendelkező projektek együtt futnak, a csoportok pedig a legalacsonyabbtól a legmagasabbig kerülnek végrehajtásra.
  • Ha ez az opció nincs beállítva, az összes projekt párhuzamosan fut.
  • Ha több projekt azonos csoportrendezési számmal rendelkezik, akkor egyszerre futnak.
Példa

Tekintsük ezt a példát:

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

A tesztek ezekben a projektekben ebben a sorrendben fognak lefutni:

 0. slow  |
          |> együtt futnak
 0. fast  |

 1. flaky |> a slow és fast után fut egyedül

A változások teljes listája a Vitest 3.2 Changelog oldalon található.

Pager
Következő oldalMiért Vitest

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team

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

A MIT licenc alapján kiadva.

Copyright (c) 2021-Present Vitest Team