4.7 KiB
Guide de Correction des Tests qui Échouent
Date: 2025-01-27
Objectif: Corriger systématiquement les 163 fichiers de tests qui échouent
🔍 Problèmes Communs Identifiés
1. Mock useToast Incorrect
Symptôme: showError is not a function
Problème:
// ❌ Incorrect
vi.mock('@/hooks/useToast', () => ({
useToast: vi.fn(() => ({
toast: vi.fn(),
})),
}));
Solution:
// ✅ Correct
const mockShowSuccess = vi.fn();
const mockShowError = vi.fn();
vi.mock('@/hooks/useToast', () => ({
useToast: vi.fn(() => ({
success: mockShowSuccess,
error: mockShowError,
toast: vi.fn(), // Optionnel pour compatibilité
})),
}));
Fichiers affectés: ~10-15 fichiers
2. React Router Context Manquant
Symptôme: Cannot destructure property 'basename' of React__namespace.useContext(...) as it is null
Problème:
// ❌ Incorrect
render(<Component />);
Solution:
// ✅ Correct - Option 1: Utiliser customRender
import { render } from '@/test/test-utils';
render(<Component />); // customRender inclut déjà Router
// ✅ Correct - Option 2: Wrapper manuel
import { BrowserRouter } from 'react-router-dom';
import { render } from '@testing-library/react';
render(
<BrowserRouter>
<Component />
</BrowserRouter>
);
Fichiers affectés: ~20-30 fichiers
3. WebSocket Mock Incomplet
Symptôme: realWebSocket.addEventListener is not a function
Solution: Déjà corrigé dans src/test/setup.ts - MockWebSocket inclut maintenant addEventListener, removeEventListener, dispatchEvent
Fichiers affectés: Tests utilisant WebSocket
4. Context Manquants (ToastContext, AuthContext, etc.)
Symptôme: Cannot read property 'X' of undefined
Solution: Utiliser customRender de test-utils.tsx qui inclut tous les Contexts nécessaires
import { render } from '@/test/test-utils';
// customRender inclut automatiquement:
// - BrowserRouter
// - QueryClientProvider
// - ToastProvider
render(<Component />);
Fichiers affectés: ~30-40 fichiers
5. Mocks API Manquants
Symptôme: Network Error ou 404 Not Found dans les tests
Solution: Ajouter handlers MSW appropriés dans le test
import { server } from '@/mocks/test-setup';
import { rest } from 'msw';
beforeEach(() => {
server.use(
rest.get('/api/tracks', (req, res, ctx) => {
return res(ctx.json({ tracks: [] }));
})
);
});
Fichiers affectés: ~50-60 fichiers
🛠️ Processus de Correction
Étape 1: Identifier les Erreurs
npm test -- --run 2>&1 | grep -E "(Error|failed|Cannot|TypeError)" > test-errors.log
Étape 2: Catégoriser les Erreurs
- Grouper par type d'erreur (useToast, Router, Context, etc.)
- Identifier les fichiers affectés
Étape 3: Corriger par Catégorie
- useToast - Corriger tous les mocks useToast d'abord
- Router - Ajouter BrowserRouter/customRender
- Context - Utiliser customRender
- Mocks API - Ajouter handlers MSW
Étape 4: Vérifier
npm test -- --run
📋 Checklist de Correction
Pour chaque fichier de test qui échoue:
- Vérifier si le test utilise
customRenderdetest-utils.tsx - Si non, remplacer
renderparcustomRenderou wrapper avec Router - Vérifier si le mock
useToastretourne{ success, error } - Si non, corriger le mock
- Vérifier si le composant utilise React Router (Link, useNavigate, etc.)
- Si oui, s'assurer que Router est présent (via customRender ou wrapper)
- Vérifier si le test nécessite des mocks API
- Si oui, ajouter handlers MSW appropriés
- Exécuter le test individuellement pour vérifier
- Répéter pour tous les tests du fichier
🚀 Script Automatique
Un script scripts/fix-failing-tests.sh a été créé pour automatiser certaines corrections:
cd apps/web
./scripts/fix-failing-tests.sh
Note: Le script fait des corrections automatiques mais certaines nécessitent une vérification manuelle.
📊 Progression
Corrections Appliquées
- ✅ Mock useToast corrigé dans
PlaylistBatchActions.test.tsx - ✅ Router ajouté dans
TrackSearch.test.tsx - ✅ Mock WebSocket amélioré dans
setup.ts - ✅ Helpers créés dans
test-utils.tsxetmocks.ts
À Faire
- ⏳ Corriger ~160 fichiers restants selon les patterns identifiés
🎯 Objectif
Avant:
- ❌ 163 fichiers de tests échouent
- ❌ 683 tests échouent
Après:
- ✅ 0 fichiers de tests échouent
- ✅ 0 tests échouent
Dernière mise à jour: 2025-01-27