Files
lcbp3/backend/jest.config.js
T

122 lines
3.0 KiB
JavaScript

/**
* Jest Configuration for LCBP3-DMS Backend
*
* ตาม Testing Strategy spec:
* - Global coverage: 70% (backend overall)
* - Services: 80% (business logic)
* - Guards/Middleware: 90%
* - Utilities: 95%
*
* @see specs/05-Engineering-Guidelines/05-04-testing-strategy.md
*/
module.exports = {
// File extensions
moduleFileExtensions: ['js', 'json', 'ts'],
// Root directory for tests
rootDir: 'src',
// Test file pattern
testRegex: '.*\\.spec\\.ts$',
// TypeScript transformation
transform: {
'^.+\\.(t|j)s$': 'ts-jest',
},
// ใช้ V8 built-in coverage แทน babel-plugin-istanbul
// เพื่อหลีกเลี่ยง test-exclude@6.0.0 + minimatch incompatibility
coverageProvider: 'v8',
// Coverage configuration
collectCoverageFrom: [
'**/*.(t|j)s',
'!**/*.d.ts',
'!**/index.ts',
'!**/database/seeds/**',
'!**/database/migrations/**',
'!**/config/**',
'!**/scripts/**',
'!**/*.module.ts',
],
coverageDirectory: '../coverage',
coveragePathIgnorePatterns: ['/node_modules/', '/test/', '/dist/'],
// Test environment
testEnvironment: 'node',
// Cache for faster subsequent runs
cacheDirectory: '.jest-cache',
// Global setup after env
setupFilesAfterEnv: ['../test/jest.setup.ts'],
// Transform ignore patterns (ให้ Jest ประมวลผล ESM modules)
// รองรับ uuid และ @nestjs/elasticsearch ที่เป็น ESM
// ใช้ .* เพื่อ match path ย่อยใน pnpm structure
transformIgnorePatterns: [
'node_modules/(?!.*(uuid|@nestjs[\\+]elasticsearch).*/)',
],
// Coverage thresholds ตาม Testing Strategy spec
coverageThreshold: {
global: {
branches: 70,
functions: 70,
lines: 70,
statements: 70,
},
'./src/modules/*/services/*.service.ts': {
branches: 80,
functions: 80,
lines: 80,
statements: 80,
},
'./src/modules/*/services/*.spec.ts': {
branches: 80,
functions: 80,
lines: 80,
statements: 80,
},
'./src/common/guards/*.ts': {
branches: 90,
functions: 90,
lines: 90,
statements: 90,
},
'./src/common/interceptors/*.ts': {
branches: 90,
functions: 90,
lines: 90,
statements: 90,
},
'./src/common/utils/*.ts': {
branches: 95,
functions: 95,
lines: 95,
statements: 95,
},
},
// Module name mapper for path aliases
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
'^@common/(.*)$': '<rootDir>/common/$1',
'^@modules/(.*)$': '<rootDir>/modules/$1',
'^@config/(.*)$': '<rootDir>/config/$1',
'^@database/(.*)$': '<rootDir>/database/$1',
},
// Verbose output for debugging
verbose: true,
// Clear mock calls between tests
clearMocks: true,
// Restore mock state after each test
restoreMocks: true,
// Maximum workers (ใช้ 50% ของ available CPUs)
maxWorkers: '50%',
};