jest.config.js Jest 의 규칙, 환경 설정 등
jest.setup.js 테스트 실행 전 준비 코드 (전역 mock, 글로벌 변수, 확장 matcher import, storage 등)
// (불필요한 라인 삭제)
module.exports = {
preset: 'react-native',
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
transformIgnorePatterns: [
'node_modules/(?!(react-native|@react-native|@react-navigation|@gorhom|react-native-reanimated|react-native-vector-icons|react-native-svg|@react-native-async-storage|@react-native-community|@react-native-firebase|@sentry|react-native-toast-message|react-native-gesture-handler|react-native-safe-area-context|react-native-screens|react-native-dialog|react-native-bouncy-checkbox|immer|react-native-pager-view)/)',
],
moduleNameMapper: {
'^react-native$': '<rootDir>/jest/react-native-mock.js',
'^react-native-vector-icons/.*$':
'<rootDir>/jest/react-native-vector-icons-mock.js',
'^@/(.*)$': '<rootDir>/src/$1',
'^react-native-safe-area-context$':
'<rootDir>/jest/react-native-safe-area-context-mock.js',
'^react-native-gesture-handler$':
'<rootDir>/jest/react-native-gesture-handler-mock.js',
'^react-native-reanimated$':
'<rootDir>/jest/react-native-reanimated-mock.js',
},
testMatch: ['**/__tests__/**/*.test.(ts|tsx|js)', '**/*.test.(ts|tsx|js)'],
collectCoverageFrom: [
'src/**/*.{ts,tsx}',
'!src/**/*.d.ts',
'!src/**/*.stories.{ts,tsx}',
'!src/**/__tests__/**',
],
};
jest.mock('react-native', () => {
let RN = {};
try {
RN = jest.requireActual('react-native');
} catch (e) {
RN = {
Platform: { OS: 'ios', select: obj => obj.ios ?? obj.default },
NativeModules: {},
Animated: {},
StyleSheet: { create: obj => obj },
};
}
return {
...RN,
Animated: {
...RN.Animated,
Value: jest.fn(() => ({
setValue: jest.fn(),
interpolate: jest.fn(config => config),
})),
},
};
});
jest.mock('@react-navigation/native', () => {
const actualNav = jest.requireActual('@react-navigation/native');
return {
...actualNav,
useNavigation: () => ({
navigate: jest.fn(),
goBack: jest.fn(),
reset: jest.fn(),
push: jest.fn(),
}),
useRoute: () => ({
params: {},
}),
useFocusEffect: jest.fn(callback => callback()),
};
});
jest.mock('react-native-reanimated', () =>
require('react-native-reanimated/mock'),
);
테스트용 데이터 생성 - React Native 테스트 환경에서 네이티브 기능이 동작하지 않거나 에러 발생에 대응하기 위해 RN 모듈울 목데이터로 만들어 테스트를 보호한다
실제 RN 모둘을 불러올 수 없는 경우 최소한의 mock 객체를 만들어서 반환하도록