module.exports = { preset: 'ts-jest', testEnvironment: 'node', roots: ['/src', '/tests'], testMatch: [ '**/__tests__/**/*.+(ts|tsx|js)', '**/*.(test|spec).+(ts|tsx|js)' ], transform: { '^.+\\.(ts|tsx)$': 'ts-jest' }, collectCoverageFrom: [ 'src/**/*.{ts,tsx}', '!src/**/*.d.ts', '!src/swagger.ts', // Skip swagger spec file '!src/types/**/*', // Skip type definitions '!src/server.ts', // Skip main server as it's integration-focused '!src/frontend/**/*', // Skip frontend files (use DOM types, tested separately) '!src/i18n/**/*', // Skip i18n files (utility functions, tested separately) '!src/services/MapImageService.ts' // Skip map service (requires external API, tested separately) ], coverageDirectory: 'coverage', coverageReporters: ['text', 'lcov', 'html'], coverageThreshold: { global: { branches: 60, functions: 65, lines: 65, statements: 65 } }, setupFilesAfterEnv: ['/tests/setup.ts'], testTimeout: 10000, verbose: true };