Průvodce migrací
Migrace z Jest
Vitest byl navržen s API kompatibilním s Jest, aby byla migrace co nejjednodušší. I přes tuto snahu se můžete setkat s následujícími rozdíly:
Globální proměnné jsou ve výchozím nastavení zakázány
Jest má ve výchozím nastavení povolené globální API. Vitest nikoliv. Můžete buď povolit globální proměnné pomocí nastavení konfigurace globals
, nebo aktualizovat kód tak, aby místo toho používal importy z modulu vitest
.
Pokud se rozhodnete neaktivovat globální proměnné, mějte na paměti, že běžné knihovny jako testing-library
nebudou automaticky spouštět DOM cleanup.
Nastavování mocků modulů
Při mockování modulu v Jest je návratová hodnota factory funkce výchozí export modulu. Ve Vitest musí factory funkce vracet objekt s explicitně definovanými exporty. Například následující jest.mock
by musel být aktualizován takto:
- jest.mock('./some-path', () => 'hello')
+ vi.mock('./some-path', () => ({
+ default: 'hello',
+ })
Pro více informací se podívejte na sekci API vi.mock
.
Chování automatických mocků
Na rozdíl od Jest, pokud není volána funkce vi.mock()
, mockované moduly ve složce <root>/__mocks__
nejsou načteny. Pokud je potřebujete simulovat v každém testu, podobně jako v Jest, můžete je mockovat uvnitř setupFiles
.
Importování originálu mockovaného balíčku
Pokud částečně simulujete balíček, možná jste dříve používali funkci requireActual
z Jest. Ve Vitest byste měli tato volání nahradit vi.importActual
.
- const { cloneDeep } = jest.requireActual('lodash/cloneDeep')
+ const { cloneDeep } = await vi.importActual('lodash/cloneDeep')
Proměnné prostředí
Stejně jako Jest, Vitest nastavuje NODE_ENV
na test
, pokud nebyla nastavena dříve. Vitest má také ekvivalent pro JEST_WORKER_ID
s názvem VITEST_POOL_ID
(vždy menší nebo roven maxThreads
). Pokud se spoléháte na JEST_WORKER_ID
, nezapomeňte ji přejmenovat na VITEST_POOL_ID
. Vitest také zpřístupňuje VITEST_WORKER_ID
, což je jedinečné ID spuštěného workeru - toto číslo není ovlivněno maxThreads
a bude se zvyšovat s každým vytvořeným workerem.
Pokud chcete změnit proměnné prostředí a používáte replaceProperty API v Jest, můžete použít vi.stubEnv k tomu i ve Vitest.
Done Callback
Od Vitest v0.10.0 je styl deklarování testů pomocí callbacku považován za zastaralý. Můžete je přepsat tak, aby používaly funkce async
/await
, nebo použít Promise k napodobení callback stylu.
- it('should work', (done) => {
+ it('should work', () => new Promise(done => {
// ...
done()
- })
+ }))
Hooky
beforeAll
/beforeEach
hooky mohou ve Vitest vracet teardown funkci. Z tohoto důvodu můžete potřebovat přepsat deklarace hooků, pokud vracejí něco jiného než undefined
nebo null
:
- beforeEach(() => setActivePinia(createTestingPinia()))
+ beforeEach(() => { setActivePinia(createTestingPinia()) })
Typy
Vitest nezpřístupňuje mnoho typů v namespacu Vi
. Ten existuje hlavně pro kompatibilitu s matchery (porovnávači), takže možná budete muset importovat typy přímo z vitest
namísto spoléhání se na namespace Vi
:
- let fn: jest.Mock<string, [string]>
+ import type { Mock } from 'vitest'
+ let fn: Mock<[string], string>
Kromě toho má Vitest typ Args
jako první argument namísto Returns
, jak můžete vidět v diff.
Časovače
Vitest nepodporuje starší časovače Jest.
Vue Snímky
Toto není funkce specifická pro Jest, ale pokud jste dříve používali Jest s vue-cli preset, budete muset nainstalovat balíček jest-serializer-vue
a použít jej uvnitř setupFiles:
vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
test: {
setupFiles: ['./tests/unit/setup.js'],
},
});
tests/unit/setup.js
import vueSnapshotSerializer from 'jest-serializer-vue';
expect.addSnapshotSerializer(vueSnapshotSerializer);
Jinak budou mít vaše snímky spoustu escapovaných uvozovek "
。