Skip to content
Vitest 2
Main Navigation ÚtmutatóAPIKonfigurációBöngésző módHaladó
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

Miért a Vitest?

Első lépések

Funkciók

Munkaterület

Parancssori felület

Tesztszűrés

Reporterek

Lefedettség

Pillanatképek

Mockolás

Típusok tesztelése

Vitest UI

Forráskódba épített tesztelés

Tesztkörnyezet

Tesztkörnyezet

Egyezésvizsgálók kiterjesztése

IDE integrációk

Hibakeresés

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

Migrálási útmutató

Gyakori hibák

Profiling Test Performance

A teljesítmény javítása

Ezen az oldalon

Migrációs útmutató ​

Migrálás Vitest 2.0-ra ​

Az alapértelmezett Pool forks ​

A Vitest 2.0-ban a pool alapértelmezett konfigurációja 'forks'-ra változott a jobb stabilitás érdekében. A teljes indoklást elolvashatja a PR linken.

Ha korábban a poolOptions-t pool megadása nélkül használta, frissítenie kell a konfigurációt az alábbiak szerint:

ts
export default defineConfig({
  test: {
    poolOptions: {
      threads: {
        singleThread: true, 
      }, 
      forks: {
        singleFork: true, 
      }, 
    },
  },
});

A Hook-ok sorosan futnak ​

A Vitest 2.0 előtt minden hook párhuzamosan futott. A 2.0-ban minden hook sorosan fut. Ezenkívül az afterAll/afterEach hook-ok fordított sorrendben futnak.

A hook-ok párhuzamos végrehajtásának visszaállításához módosítsa a sequence.hooks értékét 'parallel'-re:

ts
export default defineConfig({
  test: {
    sequence: {
      hooks: 'parallel', 
    }, 
  },
});

A suite.concurrent minden tesztet párhuzamosan futtat ​

Korábban a concurrent megadása egy tesztcsoporton belül csoportosította a párhuzamos teszteket tesztcsoportonként, sorosan futtatva őket. Mostantól, a Jest viselkedését követve, minden teszt párhuzamosan fut (a maxConcurrency korlátok figyelembevételével).

A V8 Coverage coverage.ignoreEmptyLines alapértelmezetten engedélyezve van ​

A coverage.ignoreEmptyLines alapértelmezett értéke mostantól true. Ez a jelentős változás befolyásolhatja a kódlefedettségi jelentéseket, ami egyes projektek esetében a lefedettségi küszöbök módosítását teheti szükségessé. Ez a módosítás csak az alapértelmezett beállítást érinti, ha a coverage.provider értéke 'v8'.

A watchExclude opció eltávolítása ​

A Vitest a Vite figyelő rendszerét használja. A fájlokat vagy könyvtárakat kizárhatja úgy, hogy hozzáadja őket a server.watch.ignored listához:

ts
export default defineConfig({
  server: {
    watch: {
      ignored: ['!node_modules/examplejs'], 
    }, 
  }, 
});

--segfault-retry eltávolítva ​

Az alapértelmezett pool változásaival ez az opció már nem szükséges. Ha szegmens hibákat tapasztal, próbálja meg átváltani a 'forks' poolra. Ha a probléma továbbra is fennáll, kérjük, nyisson egy új hibajegyet reprodukcióval.

Üres feladat a Suite feladatokban eltávolítva ​

Ez a változás a fejlett task API -t érinti. Korábban a .suite bejárása egy üres belső tesztcsoporthoz vezetett, amelyet fájlfeladatként használtak.

Ezáltal a .suite opcionálissá válik; ha a feladat a legfelső szinten van definiálva, akkor nem tartozik tesztcsoporthoz. Visszaállhat a .file tulajdonságra, amely mostantól minden feladaton (beleértve magát a fájlfeladatot is) elérhető, ezért ügyeljen arra, hogy ne kerüljön végtelen rekurzióba.

Ez a változás eltávolítja a fájlt az expect.getState().currentTestName-ből, és az expect.getState().testPath -t kötelezővé teszi.

A task.meta hozzáadva a JSON Reporterhez ​

A JSON reporter mostantól minden állítási eredményhez megjeleníti a task.meta -t.

Egyszerűsített általános típusok a Mock függvényekhez (pl. vi.fn<T>, Mock<T>) ​

Korábban a vi.fn<TArgs, TReturn> két külön általános típust fogadott el az argumentumokhoz és a visszatérési értékhez. Ez mostantól közvetlenül egy függvénytípust fogad el vi.fn<T> a használat egyszerűsítése érdekében.

ts
import { type Mock, vi } from 'vitest';

const add = (x: number, y: number): number => x + y;

// vi.fn<T> használata
const mockAdd = vi.fn<Parameters<typeof add>, ReturnType<typeof add>>(); 
const mockAdd = vi.fn<typeof add>(); 

// Mock<T> használata
const mockAdd: Mock<Parameters<typeof add>, ReturnType<typeof add>> = vi.fn(); 
const mockAdd: Mock<typeof add> = vi.fn(); 

Feloldott mock.results elérése ​

Korábban a Vitest feloldotta a mock.results értékeket, ha a függvény Promise-t adott vissza. Most van egy külön mock.settledResults tulajdonság, amely csak akkor populálódik, ha a visszaadott Promise feloldódott vagy elutasításra került.

ts
const fn = vi.fn().mockResolvedValueOnce('result');
await fn();

const result = fn.mock.results[0]; // 'result'
const result = fn.mock.results[0]; // 'Promise<result>'

const settledResult = fn.mock.settledResults[0]; // 'result'

Ezzel a változással új toHaveResolved* illesztőket is bevezetünk, hasonlóan a toHaveReturned-hez, hogy megkönnyítsük a migrációt, ha korábban a toHaveReturned-t használta:

ts
const fn = vi.fn().mockResolvedValueOnce('result');
await fn();

expect(fn).toHaveReturned('result'); 
expect(fn).toHaveResolved('result'); 

Böngésző mód ​

A Vitest böngésző módja számos változtatáson esett át a béta fázis alatt. A böngésző mód filozófiájáról a GitHub vitafórumon olvashat.

A változtatások többsége bővítés volt, de volt néhány kisebb törést okozó változás:

  • A none szolgáltatót preview-ra nevezték át #5842
  • A preview szolgáltató mostantól alapértelmezett #5842
  • Az indexScripts átnevezésre került orchestratorScripts-re #5842

Elavult opciók eltávolítva ​

Néhány elavult opciót töröltek:

  • vitest typecheck parancs - helyette használja a vitest --typecheck parancsot
  • VITEST_JUNIT_CLASSNAME és VITEST_JUNIT_SUITE_NAME környezeti változók (helyette használja a reporter opciókat)
  • c8 lefedettség ellenőrzése (helyette használja a coverage-v8-at)
  • SnapshotEnvironment exportálása a vitest-ből - helyette importálja a vitest/snapshot-ból
  • SpyInstance eltávolítva a MockInstance javára

Migrálás Vitest 1.0-ra ​

Minimális követelmények ​

A Vitest 1.0-hoz Vite 5.0 és Node.js 18 vagy újabb verzió szükséges.

Minden @vitest/* alcsomaghoz Vitest 1.0-s verzió szükséges.

Pillanatképek frissítése #3961 ​

A pillanatképekben lévő idézőjelek már nincsenek escape-elve, és minden pillanatkép backtick-eket (`) használ, még akkor is, ha a string csak egyetlen sor.

  1. Az idézőjelek már nincsenek escape-elve:
diff
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  Object {
-    \\"foo\\": \\"bar\\",
+    "foo": "bar",
  }
`)
  1. Az egysoros pillanatképek mostantól "`" idézőjeleket használnak a ':' helyett:
diff
- expect('some string').toMatchInlineSnapshot('"some string"')
+ expect('some string').toMatchInlineSnapshot(`"some string"`)

Változások történtek a @vitest/snapshot csomagban is (#4076). Ha nem használja közvetlenül, akkor nem kell semmit sem változtatnia.

  • Már nem kell kiterjesztenie a SnapshotClient-et csak az equalityCheck metódus felülírásához: egyszerűen adja át isEqual-ként egy példány inicializálásakor
  • A client.setTest átnevezésre került client.startCurrentRun-ra
  • A client.resetCurrent átnevezésre került client.finishCurrentRun-ra

A Pool-ok szabványosítva lettek #4172 ​

Sok konfigurációs opciót eltávolítottunk, hogy könnyebbé tegyük a tesztfuttató konfigurálását az Ön igényeinek megfelelően. Kérjük, tekintse meg a migrációs példákat, ha a --threads vagy más kapcsolódó jelzőkre támaszkodik.

  • --threads mostantól --pool=threads
  • --no-threads mostantól --pool=forks
  • --single-thread mostantól --poolOptions.threads.singleThread
  • --experimental-vm-threads mostantól --pool=vmThreads
  • --experimental-vm-worker-memory-limit mostantól --poolOptions.vmThreads.memoryLimit
  • --isolate mostantól --poolOptions.<pool-name>.isolate és browser.isolate
  • test.maxThreads mostantól test.poolOptions.<pool-name>.maxThreads
  • test.minThreads mostantól test.poolOptions.<pool-name>.minThreads
  • test.useAtomics mostantól test.poolOptions.<pool-name>.useAtomics
  • test.poolMatchGlobs.child_process mostantól test.poolMatchGlobs.forks
  • test.poolMatchGlobs.experimentalVmThreads mostantól test.poolMatchGlobs.vmThreads
diff
{
  scripts: {
-    "test": "vitest --no-threads"
     // Azonos viselkedéshez:
+    "test": "vitest --pool forks --poolOptions.forks.singleFork"
     // Vagy több párhuzamos fork:
+    "test": "vitest --pool forks"

  }
}
diff
{
  scripts: {
-    "test": "vitest --experimental-vm-threads"
+    "test": "vitest --pool vmThreads"
  }
}
diff
{
  scripts: {
-    "test": "vitest --isolate false"
+    "test": "vitest --poolOptions.threads.isolate false"
  }
}
diff
{
  scripts: {
-    "test": "vitest --no-threads --isolate false"
+    "test": "vitest --pool forks --poolOptions.forks.isolate false"
  }
}

Változások a lefedettségben #4265, #4442 ​

A coverage.all mostantól alapértelmezés szerint engedélyezett. Ez azt jelenti, hogy minden projektfájl, amely megfelel a coverage.include mintának, feldolgozásra kerül, még akkor is, ha nem kerül végrehajtásra.

A lefedettségi küszöbök API-jának szerkezete megváltozott, és mostantól támogatja a küszöbök megadását specifikus fájlokhoz glob minták használatával:

diff
export default defineConfig({
  test: {
    coverage: {
-      perFile: true,
-      thresholdAutoUpdate: true,
-      100: true,
-      lines: 100,
-      functions: 100,
-      branches: 100,
-      statements: 100,
+      thresholds: {
+        perFile: true,
+        autoUpdate: true,
+        100: true,
+        lines: 100,
+        functions: 100,
+        branches: 100,
+        statements: 100,
+      }
    }
  }
})

Mock típusok #4400 ​

Néhány típust eltávolítottak a Jest-stílusú "Mock" elnevezés mellett.

diff
- import { EnhancedSpy, SpyInstance } from 'vitest'
+ import { MockInstance } from 'vitest'

WARNING

A SpyInstance elavult a MockInstance javára, és a következő főverzióban eltávolításra kerül.

Időzítő mockok #3925 ​

A vi.useFakeTimers() már nem mockolja automatikusan a process.nextTick -et. A process.nextTick továbbra is explicit módon mockolható a vi.useFakeTimers({ toFake: ['nextTick'] }) használatával.

Azonban a process.nextTick mockolása nem lehetséges, ha a --pool=forks opciót használja. Használjon másik --pool opciót, ha szüksége van a process.nextTick mockolására.

Migrálás Jest-ről ​

A Vitest tervezésekor a Jest-kompatibilis API-t vettük alapul, hogy a Jest-ről való migráció a lehető legegyszerűbb legyen. Ennek ellenére a következő eltérésekre kell felkészülnie:

Globális változók alapértelmezés szerint ​

A Jest alapértelmezés szerint engedélyezi a globális API-t. A Vitest nem. Engedélyezheti a globális változókat a globals konfigurációs beállításon keresztül, vagy frissítheti a kódját, hogy a vitest modulból importálja a funkciókat.

Ha úgy dönt, hogy a globális változókat letiltva tartja, vegye figyelembe, hogy az olyan gyakori könyvtárak, mint a testing-library, nem végeznek automatikus DOM tisztítást.

Modul Mock-ok ​

Amikor egy modult mockolunk Jest-ben, a factory függvény argumentumának visszatérési értéke az alapértelmezett export. Vitest-ben a gyári argumentumnak egy objektumot kell visszaadnia, amelyben minden export explicit módon definiálva van. Például a következő jest.mock -ot a következőképpen kellene frissíteni:

ts
jest.mock('./some-path', () => 'hello'); 
vi.mock('./some-path', () => ({
  default: 'hello', 
})); 

További részletekért lásd a vi.mock api szekciót.

Automatikus Mockolási viselkedés ​

A Jesttől eltérően a <root>/__mocks__ mappában lévő mockolt modulok csak akkor töltődnek be, ha meghívjuk a vi.mock() függvényt. Ha azt szeretné, hogy minden tesztben utánzva legyenek, mint a Jest-ben, akkor mockolhatja őket a setupFiles -ban.

Egy mockolt csomag eredetijének importálása ​

Ha csak részlegesen mockol egy csomagot, korábban valószínűleg a Jest requireActual függvényét használta. Vitestben ezeket a hívásokat a vi.importActual -ra kell cserélnie.

ts
const { cloneDeep } = jest.requireActual('lodash/cloneDeep'); 
const { cloneDeep } = await vi.importActual('lodash/cloneDeep'); 

Mockolás kiterjesztése külső könyvtárakra ​

Míg a Jest alapértelmezetten kiterjeszti a mockolást, egy modul mockolásakor, ha azt szeretné, hogy ez a mockolás kiterjedjen más külső könyvtárakra is, amelyek ugyanazt a modult használják, explicit módon meg kell adnia, melyik harmadik féltől származó könyvtárat szeretné mockolni. Így a külső könyvtár a forráskódjának részévé válik, a server.deps.inline használatával.

server.deps.inline: ["lib-name"]

expect.getState().currentTestName ​

A Vitest test nevei > szimbólummal vannak összekapcsolva, hogy könnyebben megkülönböztethetők legyenek a tesztek a suite-októl, míg a Jest üres szóközt () használ.

diff
- `${describeTitle} ${testTitle}`
+ `${describeTitle} > ${testTitle}`

Környezeti változók ​

A Jest-hez hasonlóan a Vitest is test értékre állítja a NODE_ENV -et, ha korábban nem volt beállítva. A Vitest-nek van egy megfelelője a JEST_WORKER_ID -nek, a VITEST_POOL_ID (mindig kisebb vagy egyenlő, mint a maxThreads), így ha erre támaszkodik, ne felejtse el átnevezni. A Vitest emellett exponálja a VITEST_WORKER_ID -t is, amely egy futó worker egyedi azonosítója - ezt a számot nem befolyásolja a maxThreads, és minden létrehozott workerrel növekedni fog.

Tulajdonság cseréje ​

Ha módosítani szeretné az objektumot, a Jest-ben a replaceProperty API -t használja, Vitest-ben pedig a vi.stubEnv vagy a vi.spyOn is használható ugyanehhez.

Done Callback ​

A Vitest v0.10.0-tól kezdve a tesztek callback stílusú deklarálása elavult. Átírhatja őket async/await függvényekre, vagy használhat Promise-t a callback stílus imitálására.

it('should work', (done) => {  // [!code --]
it('should work', () => new Promise(done => { // [!code ++]
  // ...
  done()
}) // [!code --]
})) // [!code ++]

Hook-ok ​

A beforeAll/beforeEach hook-ok visszaadhatnak egy teardown függvényt a Vitest-ben. Emiatt előfordulhat, hogy át kell írnia a hook definícióit, ha azok nem undefined vagy null értéket adnak vissza:

ts
beforeEach(() => setActivePinia(createTestingPinia())); 
beforeEach(() => {
  setActivePinia(createTestingPinia());
}); 

A Jest-ben a hook-ok sorosan (egymás után) futnak le. Alapértelmezés szerint a Vitest párhuzamosan futtatja a hook-okat. A Jest viselkedésének használatához frissítse a sequence.hooks opciót:

ts
export default defineConfig({
  test: {
    sequence: {
      hooks: 'list', 
    }, 
  },
});

Típusok ​

A Vitest nem rendelkezik a jest névtér ekvivalensével, ezért a típusokat közvetlenül a vitest -ből kell importálnia:

ts
let fn: jest.Mock<(name: string) => number>; 
import type { Mock } from 'vitest'; 
let fn: Mock<(name: string) => number>; 

Időzítők ​

A Vitest nem támogatja a Jest régi időzítőit.

Időtúllépés ​

Ha a jest.setTimeout -ot használta, át kell térnie a vi.setConfig -ra:

ts
jest.setTimeout(5_000); 
vi.setConfig({ testTimeout: 5_000 }); 

Vue pillanatképek ​

Ez nem Jest-specifikus funkció, de ha korábban Jest-et használt vue-cli preset-tel, akkor telepítenie kell a jest-serializer-vue csomagot, és használnia kell a setupFiles -ban:

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    setupFiles: ['./tests/unit/setup.js'],
  },
});
js
import vueSnapshotSerializer from 'jest-serializer-vue';

expect.addSnapshotSerializer(vueSnapshotSerializer);

Ellenkező esetben a pillanatképei sok escape-elt " karaktert tartalmaznak majd.

Pager
Előző oldalÖsszehasonlítás más tesztfuttatókkal
Következő oldalGyakori hibák

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors

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

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors