Tests für React-Komponenten mit Vitest und Testing Library
Führen Sie Wire Vitest in Vite ein, platzieren Sie Verhaltenstests, führen Sie Vergleiche zwischen Watch und CI durch und instruieren Sie einen AI-Agenten, einen Rot-Grün-Prüfzyklus zu befolgen.
Vitest ist ein schneller, Vite-native Testlaufzeit-Tool, das vertraut anfühlt, wenn man Jest kennt – und lässt sich perfekt mit der React Testing Library für Tests zum Verhalten von Komponenten kombinieren. Diese Anleitung behandelt die Einrichtung, einen praktischen rote-grüne-Testzyklus, die Dateistruktur sowie die Art und Weise, wie man einem KI-Programmieragenten Anweisungen gibt, damit er hilft statt sinnlos zu arbeiten.
1. Projekt-Einrichtung
Installieren Sie den üblichen React-Testing-Stack als Entwicklungskomponenten:
npm install -D vitest jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event
Für ein Vite-React-Projekt geben Sie Vitest Informationen über die Anwendung in vite.config.ts mit, damit Aliase und Plugins den Produktionsbauten entsprechen:
For a Vite React project, add Vitest to vite.config.ts:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
test: {
environment: 'jsdom',
setupFiles: ['./src/test/setup.ts'],
globals: true,
},
})
environment: 'jsdom' stellt DOM-APIs ohne echten Browser zur Verfügung. Eine kleine Einrichtungsdatei registriert die jest-dom-Matcher einmal für jede Testsuite:
import '@testing-library/jest-dom/vitest'
Führen Sie diese Datei über Vitests Option setupFiles ein, damit Aussagen wie toBeInTheDocument und toHaveAccessibleName überall funktionieren.
2. Empfohlener Arbeitsablauf
Verwenden Sie einen engen Zyklus: Funktion → Test → Implementierung → Überprüfung → Refactoring.
- Verstehen Sie die Funktion – listen Sie das für den Benutzer sichtbare Verhalten sowie wichtige Zustände auf (Laden, Erfolg, Fehler, leer, deaktiviert). Notieren Sie API- oder Browser-Grenzen, die Emulationen erfordern, damit die Tests deterministisch bleiben.
- Schreiben Sie zuerst den Test – bevorzugen Sie Abfragen aus der React Testing Library; überprüfen Sie Ergebnisse, die der Benutzer wahrnimmt, nicht private Zustände; erzeugen Sie Klicks und Eingaben mithilfe von
userEventfür mehr Realismus.
npx vitest run src/components/Button.test.tsx
During development:
Abschau-Modus für den lokalen Feedback-Zyklus:
npx vitest
Run the full suite
Vollständige Testsuite über das npm-Skript, das in Ihrer package.json definiert ist:
npm test
oder ein einmaliger CI-ähnlicher Ausführungsvorgang ohne Abschaufunktionen:
npx vitest run
Check coverage when appropriate
Abdeckungsrate, wenn Sie ungetestete Branches genauer untersuchen möchten:
npx vitest run --coverage
Betrachten Sie die Abdeckungsrate als Leitfaden und nicht als reines Statussymbol – bevorzugen Sie aussagekräftige Prüfungen statt des Strebens nach 100 %.
3. Teststruktur
Platzieren Sie die Tests gemeinsam mit den Komponenten, die sie schützen:
src/
├── components/
│ ├── LoginForm.tsx
│ └── LoginForm.test.tsx
├── hooks/
│ ├── useUser.ts
│ └── useUser.test.ts
├── pages/
│ ├── Dashboard.tsx
│ └── Dashboard.test.tsx
└── test/
├── setup.ts
└── mocks/
For a component, structure tests around behavior:
Bilden Sie Fallbeispiele um die Ergebnisse der Benutzer statt um Namen von Methoden:
describe('LoginForm', () => {
it('allows a user to submit valid credentials', async () => {
// arrange
// act
// assert
})
it('shows validation errors for invalid input', async () => {
// ...
}) it('disables submission while logging in', async () => {
// ...
})
})
Behandeln Sie den erfolgreichen Ablauf, Validierungsfehler sowie deaktivierte oder ladende Zustände in separaten it-Blöcken. Wenn etwas schiefgeht, sollte der fehlerhafte Titel ein bestimmtes Verhalten beschreiben. Nutzen Sie Hilfsfunktionen sparsam; eine klar lesbare, duplizierte Einrichtung ist besser als raffinierte Fixtures, die die Absicht verbergen.
4. Arbeiten mit einem KI-Codeagenten
4. Vitest-agent prompt
Führen Sie den Agenten wie einen erfahrenen React-Testing-Engineer an: Schreiben oder aktualisieren Sie zunächst den fehlerhaften Test, implementieren Sie anschließend die kleinste Änderung und überprüfen Sie diese mit Vitest sowie Typüberprüfungen:
npx vitest run <target-test>
npx vitest run
npm run typecheck
npm run lint
Bitten Sie es, Tests mit der Testing Library (z. B. getByRole, findByText) gegenüber anfälligen CSS-Selektoren vorzuziehen, Netzwerkgrenzen zu simulieren anstelle des Zugriffs auf den Zustand der Komponenten, sowie eine kurze Notiz zu hinterlassen, wenn ein Test eine absichtliche Produktbeschränkung dokumentiert.
Abschlussgewohnheiten
Lassen Sie die Vitest-Konfiguration mit Vite gemeinsam genutzt werden, damit Pfadalias und Plugins der Produktumgebung entsprechen. Verwenden Sie in CI lieber run und überwachen Sie die Tests lokal. Erweitern Sie die Testsuite schrittweise mit neuen Funktionen, anstatt alles auf einmal umzuschreiben. Durch diesen Zyklus – zuerst testen, dann implementieren und überprüfen – bleiben React-Anwendungen anpassbar, ohne dass der durch Vite beschleunigte Feedbackzyklus, der Vitest ursprünglich attraktiv gemacht hat, verlangsamt wird.