EMZETT.
Login

Jest und Vitest: JavaScript-Tests schreiben

Kurz: Jest und Vitest führen JavaScript- und TypeScript-Tests aus, bieten Mocks, Schnappschüsse und Abdeckung; Vitest ist besonders schnell und passt zu Vite-Projekten.

Genauer: Beide Werkzeuge haben fast dieselbe Schreibweise mit describe, test/it und expect. Jest (Meta) ist lange Standard, vor allem bei React; Vitest ist ein jüngeres, sehr schnelles Framework mit Vite-Unterstützung, ESM und TypeScript ohne zusätzliche Konfiguration.

Im Detail

Ein Test

// summe.js
export const summe = (a, b) => a + b;
 
// summe.test.js
import { describe, it, expect } from 'vitest'; // bei Jest: global
import { summe } from './summe.js';
 
describe('summe', () => {
  it('addiert zwei Zahlen', () => {
    expect(summe(2, 3)).toBe(5);
  });
  it('geht mit negativen Zahlen um', () => {
    expect(summe(-1, -1)).toBe(-2);
  });
});

Start: npx vitest bzw. npx jest (im Watch-Modus laufen geänderte Tests automatisch erneut).

Wichtige Funktionen

  • Matcher: toBe, toEqual, toContain, toThrow, toBeNull, toHaveLength, resolves/rejects für Promises.
  • Mocks und Spies: vi.fn() / jest.fn(), vi.mock('modul'), Zeit steuern mit useFakeTimers.
  • Snapshot-Tests: Ausgabe wird gespeichert und bei Änderungen verglichen.
  • Hooks: beforeEach, afterEach.
  • Abdeckung: --coverage.
  • Asynchrones: async/await direkt im Test.
  • UI-Tests: React Testing Library, Vue Test Utils (prüfen, was Nutzer sehen), mit jsdom als simulierter Browser.

Vergleich

  • Vitest: schneller Start, nutzt dieselbe Konfiguration wie Vite, ESM-nativ, Jest-kompatible API.
  • Jest: sehr verbreitet, große Ökosystem-Basis, teils komplizierter bei ESM/TypeScript (Babel/ts-jest).
  • Node-eigener Test-Runner (node --test) für kleine Projekte ohne Abhängigkeiten.
  • Für Browser-Tests Playwright oder Cypress.

Gute Praxis

Teste Verhalten, nicht Implementierungsdetails. Eine klare Struktur Arrange – Act – Assert. Halte Tests schnell und unabhängig, mocke nur Grenzen (Netzwerk, Zeit, Datenbank). Unterschätze Snapshot-Tests nicht: zu große Schnappschüsse werden blind akzeptiert. Führe Tests in der CI aus und halte sie grün.

Siehe auch: Unit-Test, Mocking und Test-Doubles, Snapshot-Tests, Playwright