62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
import { readFileSync } from 'fs';
|
|
import { pathsToModuleNameMapper } from 'ts-jest';
|
|
|
|
const tsconfig = JSON.parse(readFileSync('./tsconfig.json', 'utf8'));
|
|
|
|
/** @type {import('jest').Config} */
|
|
export default {
|
|
preset: 'ts-jest',
|
|
testEnvironment: 'node',
|
|
|
|
// Handle module resolution for TypeScript paths
|
|
moduleNameMapper: {
|
|
...pathsToModuleNameMapper(tsconfig.compilerOptions.paths, {
|
|
prefix: '<rootDir>/',
|
|
}),
|
|
// Mock problematic libraries
|
|
'^isikukood$': '<rootDir>/__mocks__/isikukood.ts',
|
|
'^server-only$': '<rootDir>/__mocks__/server-only.ts',
|
|
},
|
|
|
|
// Test file patterns
|
|
testMatch: ['**/__tests__/**/*.(ts|tsx|js)', '**/*.(test|spec).(ts|tsx|js)'],
|
|
|
|
// Setup files
|
|
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
|
|
|
|
// Coverage configuration
|
|
collectCoverageFrom: [
|
|
'lib/**/*.{ts,tsx}',
|
|
'app/**/*.{ts,tsx}',
|
|
'components/**/*.{ts,tsx}',
|
|
'!**/*.d.ts',
|
|
'!**/node_modules/**',
|
|
'!**/.next/**',
|
|
],
|
|
|
|
// Transform configuration
|
|
transform: {
|
|
'^.+\\.(ts|tsx)$': [
|
|
'ts-jest',
|
|
{
|
|
useESM: true,
|
|
tsconfig: {
|
|
jsx: 'react-jsx',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
|
|
// Module file extensions
|
|
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
|
|
|
|
// Ignore patterns
|
|
testPathIgnorePatterns: ['<rootDir>/.next/', '<rootDir>/node_modules/'],
|
|
|
|
// Transform ignore patterns for node_modules
|
|
transformIgnorePatterns: ['node_modules/(?!(.*\\.mjs$))'],
|
|
|
|
// ESM support
|
|
extensionsToTreatAsEsm: ['.ts'],
|
|
};
|