/** * Configuration Jest pour SourceFinder * Suite complète de tests unitaires, intégration et sécurité */ module.exports = { // Environment de test testEnvironment: 'node', // Répertoires de tests testMatch: [ '**/tests/**/*.test.js', '**/tests/**/*.spec.js', '**/__tests__/**/*.js' ], // Fichiers à ignorer testPathIgnorePatterns: [ '/node_modules/', '/data/', '/logs/', '/coverage/' ], // Setup global pour les tests setupFilesAfterEnv: ['/tests/setup.js'], // Configuration coverage collectCoverage: true, coverageDirectory: 'coverage', coverageReporters: ['text', 'lcov', 'html', 'json'], collectCoverageFrom: [ 'src/**/*.js', '!src/**/*.test.js', '!src/**/*.spec.js', '!src/server.js', // Point d'entrée exclus '!src/logs/**', '!src/data/**' ], // Seuils de couverture minimums coverageThreshold: { global: { branches: 70, functions: 75, lines: 80, statements: 80 }, // Seuils critiques pour composants de sécurité 'src/security/': { branches: 90, functions: 95, lines: 95, statements: 95 }, 'src/implementations/scoring/': { branches: 85, functions: 90, lines: 90, statements: 90 } }, // Configuration timeouts testTimeout: 30000, // 30s pour tests d'intégration avec LLM // Variables d'environnement de test setupFiles: ['/tests/env.setup.js'], // Reporters simplifiés reporters: [ 'default' ], // Support mocking clearMocks: true, resetMocks: true, restoreMocks: true, // Configuration verbose verbose: true, // Détection des tests qui s'exécutent en boucle detectOpenHandles: true, detectLeaks: true, // Support ES modules et CommonJS transform: { '^.+\\.js$': 'babel-jest' }, // Configuration pour tests parallèles maxWorkers: '50%', // Glob patterns pour différents types de tests projects: [ { displayName: 'unit', testMatch: ['/tests/unit/**/*.test.js'], testTimeout: 10000 }, { displayName: 'integration', testMatch: ['/tests/integration/**/*.test.js'], testTimeout: 30000 }, { displayName: 'security', testMatch: ['/tests/security/**/*.test.js'], testTimeout: 15000 }, { displayName: 'performance', testMatch: ['/tests/performance/**/*.test.js'], testTimeout: 60000 } ] };