TL;DR
Was: Ein erfreuliches JavaScript-Testing-Framework mit Null-Konfiguration.
Warum: Schnell, Snapshot-Testing, großartiges Mocking, eingebaute Coverage, weit verbreitet.
Quick Start
Installation:
npm install --save-dev jest
Zu package.json hinzufügen:
{
"scripts": {
"test": "jest"
}
}
Testdatei erstellen (sum.test.js):
const sum = (a, b) => a + b;
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Tests ausführen:
npm test
Cheatsheet
| Matcher | Beschreibung |
|---|---|
toBe(value) | Exakte Gleichheit |
toEqual(obj) | Tiefe Gleichheit |
toBeTruthy() | Truthy-Wert |
toBeNull() | Null-Prüfung |
toContain(item) | Array enthält |
toThrow() | Wirft Fehler |
toHaveBeenCalled() | Mock wurde aufgerufen |
Gotchas
Async testing
// Async/await
test('fetches data', async () => {
const data = await fetchData();
expect(data).toBe('data');
});
// Promises
test('resolves to data', () => {
return expect(fetchData()).resolves.toBe('data');
});
Mocking
// Mock-Funktion
const mockFn = jest.fn();
mockFn.mockReturnValue(42);
mockFn.mockResolvedValue('async result');
// Modul mocken
jest.mock('./api', () => ({
fetchUser: jest.fn().mockResolvedValue({ name: 'John' })
}));
Snapshot testing
test('renders correctly', () => {
const tree = renderer.create(<Button>Click</Button>).toJSON();
expect(tree).toMatchSnapshot();
});
Setup and teardown
beforeAll(() => { /* Einmal vor allen Tests ausführen */ });
afterAll(() => { /* Einmal nach allen Tests ausführen */ });
beforeEach(() => { /* Vor jedem Test ausführen */ });
afterEach(() => { /* Nach jedem Test ausführen */ });
Next Steps
- Jest Dokumentation - Offizielle Docs
- React testen - React-Testing
- Mock-Funktionen - Mocking-Anleitung
- Jest Cheat Sheet - Kurzreferenz