First-attempt commit02728909fonly captured the .gitignore change; the pre-commit hook silently dropped the 343 staged moves/deletes during lint-staged's "no matching task" path. This commit re-applies the intended J1 content on top of24af2f72b(which was pushed in parallel). Uses --no-verify because: - J1 only touches .md/.json/.log/.png/binaries — zero code that would benefit from lint-staged, typecheck, or vitest - The hook demonstrated it corrupts pure-rename commits in this repo - Explicitly authorized by user for this one commit Changes (343 total: 169 deletions + 174 renames): Binaries purged (~167 MB): - veza-backend-api/{server,modern-server,encrypt_oauth_tokens,seed,seed-v2} Generated reports purged: - 9 apps/web/lint_report*.json (~32 MB) - 8 apps/web/tsc_*.{log,txt} + ts_*.log (TS error snapshots) - 3 apps/web/storybook_*.json (1375+ stored errors) - apps/web/{build_errors*,build_output,final_errors}.txt - 70 veza-backend-api/coverage*.out + coverage_groups/ (~4 MB) - 3 veza-backend-api/internal/handlers/*.bak Root cleanup: - 54 audit-*.png (visual regression baselines, ~11 MB) - 9 stale MVP-era scripts (Jan 27, hardcoded v0.101): start_{iteration,mvp,recovery}.sh, test_{mvp_endpoints,protected_endpoints,user_journey}.sh, validate_v0101.sh, verify_logs_setup.sh, gen_hash.py Session docs archived (not deleted — preserved under docs/archive/): - 78 apps/web/*.md → docs/archive/frontend-sessions-2026/ - 43 veza-backend-api/*.md → docs/archive/backend-sessions-2026/ - 53 docs/{RETROSPECTIVE_V,SMOKE_TEST_V,PLAN_V0_,V0_*_RELEASE_SCOPE, AUDIT_,PLAN_ACTION_AUDIT,REMEDIATION_PROGRESS}*.md → docs/archive/v0-history/ README.md and CONTRIBUTING.md preserved in apps/web/ and veza-backend-api/. Note: The .gitignore rules preventing recurrence were already pushed in02728909fand remain in place — this commit does not modify .gitignore. Refs: AUDIT_REPORT.md §11
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