Tests Frontend — Vitest¶
Documentation des tests frontend avec Vitest et React Testing Library.
Configuration¶
Les tests Vitest sont configurés dans frontend/vite.config.ts et frontend/src/test/setup.ts.
Quoi tester côté frontend¶
| Composant | Type de test | Focus |
|---|---|---|
| Composants UI | Render test | Affiche les bonnes données, répond aux events |
| Hooks React Query | Mock API | Retourne les bonnes données, gère les erreurs |
| Utils / helpers | Unit test | Transformations pures |
| Schémas Zod | Unit test | Validation des données |
Test d'un composant¶
// components/features/game/GameCard.test.tsx
import { render, screen } from '@testing-library/react';
import { GameCard } from './GameCard';
import { createWrapper } from '@/test/utils'; // React Query + i18n wrapper
const mockGame = {
id: 1,
type: 'competitive',
status: 'confirmed',
scheduledAt: '2024-03-15T10:00:00Z',
players: ['Alice', 'Bob', 'Charlie', 'David'],
};
describe('GameCard', () => {
it('renders game details correctly', () => {
render(<GameCard game={mockGame} />, { wrapper: createWrapper() });
expect(screen.getByText(/Alice/)).toBeInTheDocument();
expect(screen.getByText(/competitive/i)).toBeInTheDocument();
});
it('shows confirmed badge when status is confirmed', () => {
render(<GameCard game={mockGame} />, { wrapper: createWrapper() });
expect(screen.getByRole('badge', { name: /confirmé/i })).toBeInTheDocument();
});
});
Test d'un schéma Zod¶
// hooks/useCreateGame.test.ts
import { createGameSchema } from '@/schemas/game';
describe('createGameSchema', () => {
it('validates correct data', () => {
const result = createGameSchema.safeParse({
type: 'friendly',
scheduledAt: new Date().toISOString(),
});
expect(result.success).toBe(true);
});
it('rejects invalid type', () => {
const result = createGameSchema.safeParse({ type: 'invalid' });
expect(result.success).toBe(false);
expect(result.error?.issues[0].path).toContain('type');
});
});