Skip to content
Vitest 1
Main Navigation ÚtmutatóAPIKonfigurációHaladó
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

Útmutató

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

Böngésző mód

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

A teljesítmény javítása

API

Teszt API Dokumentáció

Mock függvények

Vi

expect

expectTypeOf

assert

assertType

Konfiguráció

A Vitest konfigurációs fájl beállítása

Vitest konfigurálása

Ezen az oldalon

Migrálási útmutató ​

Migrálás Vitest 0.34.6-ról ​

Minimális követelmények ​

A Vitest 1.0 Vite 5.0-át és Node.js 18 vagy újabb verziót igényel.

Az összes @vitest/* alcsomaghoz Vitest 1.0 verzió szükséges.

Pillanatképek frissítése #3961 ​

A pillanatfelvételekben az idézőjelek már nincsenek escape-elve, és minden pillanatfelvétel backtick (`) idézőjeleket használ, még akkor is, ha a szöveg 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 pillanatfelvételek most "`" idézőjeleket használnak a ':' helyett:
diff
- expect('some string').toMatchInlineSnapshot('"some string"')
+ expect('some string').toMatchInlineSnapshot(`"some string"`)

A @vitest/snapshot csomagban is történtek változások. Ha nem használod közvetlenül, nem szükséges módosítanod semmit.

  • Már nem kell kiterjesztened a SnapshotClient-et csak azért, hogy felülírd az equalityCheck metódust: csak add át isEqual paraméterként a példányosításkor.
  • A client.setTest átnevezve client.startCurrentRun-ra
  • A client.resetCurrent átnevezve client.finishCurrentRun-ra

A pool-ok szabványosítva #4172 ​

Eltávolítottunk sok konfigurációs opciót, hogy könnyebben konfigurálhasd a tesztkörnyezetet az igényeidnek megfelelően. Kérlek, nézd meg a migrációs példákat, ha a --threads vagy más kapcsolódó kapcsolókra támaszkodsz.

  • A --threads most --pool=threads
  • A --no-threads most --pool=forks
  • A --single-thread most --poolOptions.threads.singleThread
  • A --experimental-vm-threads most --pool=vmThreads
  • A --experimental-vm-worker-memory-limit most --poolOptions.vmThreads.memoryLimit
  • Az --isolate most --poolOptions.<pool-name>.isolate és browser.isolate
  • A test.maxThreads most test.poolOptions.<pool-name>.maxThreads
  • A test.minThreads most test.poolOptions.<pool-name>.minThreads
  • A test.useAtomics most test.poolOptions.<pool-name>.useAtomics
  • A test.poolMatchGlobs.child_process most test.poolMatchGlobs.forks
  • A test.poolMatchGlobs.experimentalVmThreads most test.poolMatchGlobs.vmThreads
diff
{
  scripts: {
-    "test": "vitest --no-threads"
     // For identical behaviour:
+    "test": "vitest --pool forks --poolOptions.forks.singleFork"
     // Or multi parallel forks:
+    "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 opció jelenleg alapértelmezés szerint engedélyezve van. Ez azt jelenti, hogy a coverage.include mintára illeszkedő összes projektfájl feldolgozásra kerül, még akkor is, ha nem futnak le a tesztek során.

Megváltozott a lefedettségi küszöbértékek API-ja, amely mostantól támogatja a küszöbértékek glob mintákkal történő megadását konkrét fájlokhoz.

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 változása #4400 ​

Eltávolítottunk néhány típust a Jest-stílusú "Mock" elnevezés egységesítése érdekében.

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 el lesz távolítva.

Időzítő mock-ok #3925 ​

A vi.useFakeTimers() mostantól nem helyettesíti automatikusan a process.nextTick működését. Továbbra is lehetséges a process.nextTick mock-olása, ha explicit módon megadod a vi.useFakeTimers({ toFake: ['nextTick'] }) használatával.

Azonban a process.nextTick helyettesítése nem lehetséges a --pool=forks használatakor. Használj másik --pool opciót, ha szükséged van a process.nextTick funkcióra.

Migrálás Jest-ről ​

A Vitest a Jest API-jával való kompatibilitásra lett tervezve, hogy a Jest-ről való átállás minél egyszerűbb legyen. Ennek ellenére a következő különbségek merülhetnek fel:

Globális változók alapértelmezettként ​

A Jest-nek alapértelmezés szerint engedélyezve van a globális API. A Vitest-nek nincs. Engedélyezheted a globális változókat a globals konfigurációs beállításon keresztül, vagy frissítheted a kódot, hogy a vitest modulból importáljon.

Ha a globális változók használata helyett a modul importálást választod, vedd figyelembe, hogy a gyakori könyvtárak, mint például a testing-library, nem fogják automatikusan futtatni a DOM cleanup funkciót.

Modulok mock-olása ​

Jest esetén egy modul helyettesítésekor a factory argumentum visszatérési értéke az alapértelmezett export lesz. Vitest esetén a factory argumentumnak egy objektumot kell visszaadnia, amelyben minden export explicit módon definiált. Például a következő jest.mock-ot a következőképpen kell frissíteni:

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

További részletekért kérlek, tekintsd meg a vi.mock API szekciót.

Automatikus Mock-olási viselkedés ​

Eltérően a Jest-től, a <root>/__mocks__ mappában található helyettesítő modulok nem töltődnek be automatikusan, csak a vi.mock() meghívásakor. Ha azt szeretnéd, hogy minden tesztben mock-olva legyenek, mint a Jest-ben, akkor mock-olhatod őket a setupFiles belsejében.

Mock-olt csomag eredetijének importálása ​

Ha egy csomagot csak részlegesen helyettesítesz, a Jest-ben a requireActual függvényt használhattad. Vitest-ben ezeket a hívásokat a vi.importActual-ra kell cserélned.

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

A mock-olás kiterjesztése külső könyvtárakra ​

Jest esetén ez alapértelmezett viselkedés. Ha egy modul helyettesítését ki szeretnéd terjeszteni más, ugyanazt a modult használó külső könyvtárakra is, explicit módon meg kell adnod, mely külső könyvtárakra vonatkozzon a helyettesítés. Ehhez a server.deps.inline beállítást kell használnod, hogy a külső könyvtár a forráskódod részévé váljon.

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

A mock-olt Promise visszatérési értékeinek elérése ​

Mind a Jest, mind a Vitest a mock.results tömbben tárolja a helyettesítő hívások eredményeit, ahol az egyes hívások visszatérési értékei a value tulajdonságban találhatók. Ha egy Promise-t helyettesítesz vagy figyelsz (pl. a mockResolvedValue használatával), Jest esetén a value tulajdonság egy Promise lesz, míg Vitest esetén a Promise feloldásakor a value tulajdonság a feloldott értéket fogja tartalmazni.

ts
await expect(spy.mock.results[0].value).resolves.toBe(123); 
expect(spy.mock.results[0].value).toBe(123); 

Környezeti változók ​

A Jest-hez hasonlóan a Vitest is test-re állítja a NODE_ENV környezeti változót, ha az korábban nem volt beállítva. A JEST_WORKER_ID környezeti változónak a Vitest-ben a VITEST_POOL_ID felel meg (melynek értéke mindig kisebb vagy egyenlő, mint a maxThreads). Ha erre támaszkodsz, ne felejtsd el átnevezni. A Vitest emellett elérhetővé teszi a VITEST_WORKER_ID környezeti változót is, amely egy futó worker egyedi azonosítója. Ennek az értékét nem befolyásolja a maxThreads, és minden létrehozott workerrel növekszik.

Tulajdonság cseréje ​

Ha egy objektum tulajdonságát szeretnéd módosítani, Jest esetén a replaceProperty API-t használhatod. Vitest-ben a vi.stubEnv vagy a vi.spyOn függvényekkel érheted el ugyanezt.

Done Callback ​

A Vitest v0.10.0 verziójától kezdve a tesztek callback stílusú deklarálása elavultnak minősül. Javasolt az async/await függvények használata, vagy a callback stílus Promise-ekkel való helyettesítése.

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

Hook-ok ​

A beforeAll/beforeEach hook-ok Vitest-ben teardown függvényt adhatnak vissza. Emiatt szükség lehet a hook deklarációk módosítására, ha azok undefined vagy null értéktől eltérő értéket adnak vissza.

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

Jest esetén a hook-ok szekvenciálisan (egymás után) futnak le. Ezzel szemben a Vitest alapértelmezés szerint párhuzamosan futtatja a hook-okat. A Jest viselkedésének eléréséhez módosítsd a sequence.hooks opciót.

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

Típusok ​

A Vitest nem rendelkezik a Jest jest névterének megfelelőjével, ezért a típusokat közvetlenül a vitest modulból kell importálnod.

ts
let fn: jest.Mock<string, [string]>; 
import type { Mock } from 'vitest'; 
let fn: Mock<[string], string>; 

A Vitest-ben az Args típus az első argumentum a Returns helyett, ahogy az a diff-ben is látható.

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áltad, akkor át kell migrálnod a vi.setConfig-ra:

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

Vue Pillanatképek ​

Ez nem egy Jest-specifikus funkció, de ha korábban a Jest-et a vue-cli preset-tel használtad, telepítened kell a jest-serializer-vue csomagot, és be kell állítanod a setupFiles fájlban:

vite.config.js

js
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    setupFiles: ['./tests/unit/setup.js'],
  },
});

tests/unit/setup.js

js
import vueSnapshotSerializer from 'jest-serializer-vue';

expect.addSnapshotSerializer(vueSnapshotSerializer);

Ellenkező esetben a pillanatfelvételekben sok escape-elt " karakter fog szerepelni.

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://v1.vitest.dev/guide/migration

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors