Migration von Jest (mit --experimental-vm-modules Flag) zu Vitest für crittr. Nutze diesen Skill bei der Phase-4-Umstellung, beim Mapping von jest.config zu vitest.config, beim Überführen von globalSetup/globalTeardown mit Puppeteer-Fixtures, oder beim Mass-Replace von jest.fn/spyOn auf vi.fn/vi.spyOn in Test-Suites.
--experimental-vm-modules mehr.Install:
npm install -D vitest
Remove:
npm uninstall jest @types/jest cross-env
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globals: false,
environment: 'node',
include: ['test/tests/**/*.test.{js,ts}'],
globalSetup: './test/setup.ts',
bail: 1,
reporters: ['verbose'],
testTimeout: 60_000,
hookTimeout: 60_000,
},
});
Globaler Teardown: Vitest unterstützt globalSetup-Return-Funktion als Teardown. Beispiel:
// test/setup.ts
export default async function globalSetup() {
// ... start server / browser
return async () => {
// teardown logic (was jest globalTeardown)
};
}
Alternativ: Separate globalTeardown-Option in Vitest-Config (Versions-abhängig).
// test/tests/basic.test.js
describe('basic', () => {
it('extracts critical css', async () => {
const result = await run();
expect(result.critical).toBeDefined();
});
});
// test/tests/basic.test.ts
import { describe, it, expect } from 'vitest';
describe('basic', () => {
it('extracts critical css', async () => {
const result = await run();
expect(result.critical).toBeDefined();
});
});
Bei Vitest mit globals: true funktioniert Jest-like auch ohne Imports — wir halten globals: false für Sauberkeit.
| Jest | Vitest |
|---|---|
jest.fn() | vi.fn() |
jest.spyOn() | vi.spyOn() |
jest.mock() | vi.mock() |
jest.useFakeTimers() | vi.useFakeTimers() |
beforeAll/afterAll | identisch |
test.only / test.skip | identisch |
jest.setTimeout(ms) im File | test.setTimeout(ms) oder Config |
{
"scripts": {
"test": "vitest run --reporter=verbose",
"test:watch": "vitest",
"test:ui": "vitest --ui"
}
}
setup.js: Sicherstellen, dass Singleton zwischen Tests bleibt.test.concurrent nicht zusätzlich nutzen, wenn Fixture sequenziell erwartet wird.pool: 'forks' kann helfen, wenn native Addons (puppeteer) Probleme machen.Bei Puppeteer-Problemen: