개발자

jest환경에서의 export * from './*' 이슈

2023년 05월 10일조회 58

안녕하세요 react native로 테스트코드를 짜다가 막힌 개발자입니다 저는 주로 hooks라는 폴더가 있으면 그 안에 index.ts를 만들어서 이와 같은 레이어의 폴더,파일들을 전부 export * from './*' 하여 실제로 사용할때 import { someHook } from 'hooks' 이렇게 사용하고 있었습니다. 구현 및 동작에는 오랫동안 이슈가 없었지만 이번에 유닛테스트를 도입하면서 jest가 'hooks'라는 놈을 import하는 파일을 테스트할 시 그 안에 모든 파일들을 읽어서 테스트실패가 아닌 jest에러를 계속 만나고 있습니다.. 노가다 mocking을 하여 어느정도 막았지만 테스트할 파일이 아닌 파일에서 계속 에러가 등장해서 babel과 jest의 config를 계속 수정해봤지만 해결이 되지않아 이렇게 자문을 구합니다. 추가로 웹에서도 이러한 export * 을 사용한 index.ts패턴을 사용할 때 성능 등의 이슈가 없는지 궁금합니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

커리어리 AI 봇님의 프로필 사진

안녕하세요! Jest 환경에서 'export * from './*'' 패턴을 사용할 때 발생하는 이슈에 대해 도움을 드리겠습니다. Jest가 'export *' 문을 처리하는 동작은 일반적인 ES 모듈 동작과 다를 수 있습니다. Jest의 동작은 모든 파일을 실행하지 않고 모듈 간의 관계를 추적하여 필요한 파일만 가져오려고 시도하기 때문입니다. 따라서 'export * from './*'' 패턴은 Jest 환경에서 예상치 못한 동작을 일으킬 수 있습니다. 이 문제를 해결하기 위한 일반적인 패턴은 'index.ts' 파일에서 명시적으로 내보낼 파일들을 나열하는 것입니다. 예를 들어, 'index.ts' 파일을 다음과 같이 수정해보세요. 이렇게 하면 Jest가 명시적으로 내보낸 파일들을 찾고 필요한 모듈만 가져와서 테스트를 수행하게 됩니다. 성능 측면에서 'export *' 패턴에는 일반적으로 큰 이슈는 없습니다. 다만, 모든 파일을 한 번에 내보내기 때문에 프로젝트의 규모가 커질수록 번들 크기가 커질 수 있습니다. 이를 방지하기 위해 트리 쉐이킹(Tree Shaking) 기능을 활용하여 사용하지 않는 파일은 제외하는 것이 좋습니다. 대부분의 빌드 도구 (예: Webpack)는 트리 쉐이킹을 자동으로 처리하므로 큰 문제가 되지 않을 것입니다. 하지만 특정 상황에서 번들 크기가 큰 문제가 된다면, 필요한 모듈만 직접 가져오는 방식으로 개별적인 'import' 문을 사용하는 것이 좋을 수 있습니다. 테스트 파일에서는 'import { someHook } from 'hooks''와 같이 훅을 가져오는 대신에 'import SomeHook from 'hooks/SomeHook''과 같이 개별 파일을 가져오는 것이 좋습니다. 이렇게 하면 Jest의 모듈 해석 동작과 충돌하지 않으며, 모듈 간의 의존성을 명확하게 파악할 수 있습니다. 이러한 접근 방식을 사용하면 Jest 환경에서도 원하는 대로 테스트를 수행할 수 있을 것입니다.

1
2
3
export { default as SomeHook } from './SomeHook';
export { default as AnotherHook } from './AnotherHook';
// 다른 필요한 훅들을 명시적으로 나열합니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!