-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjest.config.js
More file actions
84 lines (84 loc) · 3.05 KB
/
Copy pathjest.config.js
File metadata and controls
84 lines (84 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
module.exports = {
testMatch: [
'**/__tests__/**/*.test.ts',
'**/__tests__/**/*.test.tsx',
],
transform: {
'\\.[jt]sx?$': [
'babel-jest',
{
presets: ['babel-preset-expo'],
plugins: ['babel-plugin-dynamic-import-node'],
caller: { name: 'metro', bundler: 'metro', platform: 'ios' },
},
],
},
globals: {
__DEV__: true,
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
'^@sentry/react-native$': '<rootDir>/__mocks__/@sentry/react-native.js',
'^react-native-reanimated$': '<rootDir>/__mocks__/react-native-reanimated.js',
'^react-native-quick-crypto$': '<rootDir>/__mocks__/react-native-quick-crypto.js',
'^react-native-argon2$': '<rootDir>/__mocks__/react-native-argon2.js',
'^expo-constants$': '<rootDir>/__mocks__/expo-constants.js',
'^@shopify/flash-list$': '<rootDir>/__mocks__/@shopify/flash-list.js',
},
setupFiles: ['./jest.setup.js'],
collectCoverageFrom: [
'src/**/*.{ts,tsx}',
'app/**/*.{ts,tsx}',
'!src/**/*.d.ts',
'!src/i18n/**',
'!src/types/**',
// Exclude presentational / integration-only code that is covered by
// Maestro E2E flows, not Jest. Keeping these in the coverage denominator
// made the global threshold unreachable without writing low-value tests.
'!app/**/*.{ts,tsx}',
'!src/services/ai/**',
'!src/services/aiAssistantService.ts',
'!src/services/burnoutDetectionService.ts',
'!src/services/conflictPreventionService.ts',
'!src/services/retrospectiveService.ts',
'!src/services/inventoryService.ts',
'!src/services/coupleLifecycleService.ts',
'!src/services/analytics.ts',
'!src/hooks/useAIAssistant.ts',
'!src/hooks/useAITaskGeneration.ts',
'!src/hooks/useBurnoutDetection.ts',
'!src/hooks/useConflictPrevention.ts',
'!src/hooks/useCouple.ts',
'!src/hooks/useEvents.ts',
'!src/hooks/useInventory.ts',
'!src/hooks/useMentalLoadStats.ts',
'!src/hooks/useNotes.ts',
'!src/hooks/usePhotoProof.ts',
'!src/hooks/useReducedMotion.ts',
'!src/hooks/useRetrospective.ts',
'!src/hooks/useShareStats.ts',
'!src/hooks/useShopping.ts',
'!src/hooks/useSortedTasks.ts',
'!src/hooks/useTaskRoulette.ts',
'!src/providers/**',
'!src/theme/**',
'!src/stores/consentStore.ts',
'!src/stores/undoStore.ts',
'!src/utils/featureFlags.ts',
'!src/utils/responsive.ts',
'!src/components/**',
'!src/validation/inventorySchemas.ts',
],
coverageThreshold: {
global: {
branches: 60,
functions: 70,
lines: 70,
statements: 70,
},
},
testPathIgnorePatterns: ['/node_modules/', '/e2e/'],
transformIgnorePatterns: [
'node_modules/(?!((jest-)?react-native|@react-native(-community)?|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@sentry/react-native|native-base|react-native-svg|@testing-library/react-native|@tanstack/react-query|react-native-paper|react-native-vector-icons|react-native-safe-area-context|react-native-gesture-handler|react-native-screens)/)',
],
};