# 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:** ```typescript // ❌ Incorrect vi.mock('@/hooks/useToast', () => ({ useToast: vi.fn(() => ({ toast: vi.fn(), })), })); ``` **Solution:** ```typescript // ✅ 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:** ```typescript // ❌ Incorrect render(); ``` **Solution:** ```typescript // ✅ Correct - Option 1: Utiliser customRender import { render } from '@/test/test-utils'; render(); // customRender inclut déjà Router // ✅ Correct - Option 2: Wrapper manuel import { BrowserRouter } from 'react-router-dom'; import { render } from '@testing-library/react'; render( ); ``` **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 ```typescript import { render } from '@/test/test-utils'; // customRender inclut automatiquement: // - BrowserRouter // - QueryClientProvider // - ToastProvider render(); ``` **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 ```typescript 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 ```bash 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 1. **useToast** - Corriger tous les mocks useToast d'abord 2. **Router** - Ajouter BrowserRouter/customRender 3. **Context** - Utiliser customRender 4. **Mocks API** - Ajouter handlers MSW ### Étape 4: Vérifier ```bash npm test -- --run ``` --- ## 📋 Checklist de Correction Pour chaque fichier de test qui échoue: - [ ] Vérifier si le test utilise `customRender` de `test-utils.tsx` - [ ] Si non, remplacer `render` par `customRender` ou wrapper avec Router - [ ] Vérifier si le mock `useToast` retourne `{ 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: ```bash 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.tsx` et `mocks.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