forked from cardosofelipe/fast-next-template
- Raise coverage thresholds to 90% statements/lines/functions, 85% branches - Add comprehensive tests for ProjectDashboard, ProjectWizard, and all wizard steps - Add tests for issue management: IssueDetailPanel, BulkActions, IssueFilters - Expand IssueTable tests with keyboard navigation, dropdown menu, edge cases - Add useIssues hook tests covering all mutations and optimistic updates - Expand eventStore tests with selector hooks and additional scenarios - Expand useProjectEvents tests with error recovery, ping events, edge cases - Add PriorityBadge, StatusBadge, SyncStatusIndicator fallback branch tests - Add constants.test.ts for comprehensive constant validation Bug fixes: - Fix false positive rollback test to properly verify onMutate context setup - Replace deprecated substr() with substring() in mock helpers - Fix type errors: ProjectComplexity, ClientMode enum values - Fix unused imports and variables across test files - Fix @ts-expect-error directives and method override signatures 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
58 lines
2.8 KiB
JavaScript
58 lines
2.8 KiB
JavaScript
const nextJest = require('next/jest');
|
|
|
|
const createJestConfig = nextJest({
|
|
// Provide the path to your Next.js app to load next.config.js and .env files in your test environment
|
|
dir: './',
|
|
});
|
|
|
|
// Add any custom config to be passed to Jest
|
|
const customJestConfig = {
|
|
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
|
|
// Custom environment that suppresses jsdom VirtualConsole XMLHttpRequest errors
|
|
testEnvironment: '<rootDir>/jest.environment.js',
|
|
moduleNameMapper: {
|
|
'^next-intl$': '<rootDir>/tests/__mocks__/next-intl.tsx',
|
|
'^next-intl/routing$': '<rootDir>/tests/__mocks__/next-intl-routing.tsx',
|
|
'^next-intl/navigation$': '<rootDir>/tests/__mocks__/next-intl-navigation.tsx',
|
|
'^@/components/i18n$': '<rootDir>/tests/__mocks__/components-i18n.tsx',
|
|
'^@/(.*)$': '<rootDir>/src/$1',
|
|
},
|
|
testMatch: ['<rootDir>/tests/**/*.test.ts', '<rootDir>/tests/**/*.test.tsx'],
|
|
transformIgnorePatterns: [
|
|
'node_modules/(?!(react-syntax-highlighter|refractor|hastscript|hast-.*|unist-.*|property-information|space-separated-tokens|comma-separated-tokens|web-namespaces|next-intl|use-intl)/)',
|
|
],
|
|
collectCoverageFrom: [
|
|
'src/**/*.{js,jsx,ts,tsx}',
|
|
'!src/**/*.d.ts',
|
|
'!src/**/*.stories.{js,jsx,ts,tsx}',
|
|
'!src/**/__tests__/**',
|
|
'!src/lib/api/generated/**', // Auto-generated API client - do not test
|
|
'!src/lib/api/client-config.ts', // Integration glue for generated client - covered by E2E
|
|
'!src/lib/api/hooks/**', // React Query hooks - tested in E2E (require API mocking)
|
|
'!src/**/*.old.{js,jsx,ts,tsx}', // Old implementation files
|
|
'!src/components/ui/**', // shadcn/ui components - third-party, no need to test
|
|
'!src/app/**/layout.{js,jsx,ts,tsx}', // Layout files - complex Next.js-specific behavior (test in E2E)
|
|
'!src/app/**/page.{js,jsx,ts,tsx}', // Page components - server components tested in E2E
|
|
'!src/app/dev/**', // Dev pages - development tools, not production code
|
|
'!src/app/**/error.{js,jsx,ts,tsx}', // Error boundaries - tested in E2E
|
|
'!src/app/**/loading.{js,jsx,ts,tsx}', // Loading states - tested in E2E
|
|
'!src/**/index.{js,jsx,ts,tsx}', // Re-export index files - no logic to test
|
|
'!src/lib/utils/cn.ts', // Simple utility function from shadcn
|
|
'!src/middleware.ts', // middleware.ts - no logic to test
|
|
'!src/mocks/**', // MSW mock data (demo mode only, not production code)
|
|
'!src/components/providers/MSWProvider.tsx', // MSW provider - demo mode only
|
|
'!src/components/demo/**', // Demo mode UI components - demo mode only
|
|
],
|
|
coverageThreshold: {
|
|
global: {
|
|
branches: 85,
|
|
functions: 90,
|
|
lines: 90,
|
|
statements: 90,
|
|
},
|
|
},
|
|
};
|
|
|
|
// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
|
|
module.exports = createJestConfig(customJestConfig);
|