# 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