본문 바로가기
React

Error 정리: jest와 apollo-client testing [MockedProvider - TypeError: Object protot

by 윤-찬미 2021. 7. 12.

jest를 사용하며 apollo-client mockProvider 로 테스트를 진행하고자 코드를 작성하고 test를 돌렸는데,
아래와 같은 문제가 생겼다.


원인을 여러가지로 추려 봤었는데,
대부분 답변은 '버전문제' 라고 했다. 하지만 난 그 버전 이슈가 난 버전과 동일한 버전이 아니였기에 패스

왜그런지 이유를 못찾아서 삽질을 엄청 했다!
구글링을 열심히 해본 결과! jsconfig 에 설정해둔 baseUrl "./" 이부분때문인 것 같았다.

우선 나의 환경은 모든 프로젝트의 경로는 baseUrl의 경로에 따라 움직였다.
baseUrl 을 설정해뒀기 때문에, 모든 경로에서 절대 경로로 불러왔다. 따라서 jest를 돌릴때도
jest에게 내가 baseUrl 설정했음을 알려야 했다.
그래서 아래와 같이 작성했는데, 사건의 발달은 아래서 부터 시작했다고 한다. (내가 죄인이요)

module.exports = {
  moduleDirectories: ['node_modules', '.'],
};


🥲아래글을 참고 했었긴 했다..

<rootDir> 로 해결.
jest 에서의 <rootDir>은 package.json의 위치를 기반으로 루트를 자동지정 해준다.
근데 package.json이 있는 위치가 내가 jest.config.js 파일이 있는 위치랑 동일 했기에 사실
<rootDir> === '.' 이 같다고 생각을 했다.
음 rootDir의 동작이 내가 생각하는 동작이랑 다른 부분이 있나?


😭 왜 그런지 이유를 찾았다.

<rootDir> === '.' 는 맞지만,
rootDir 대신 .를 쓰면, node_modules 내부까지 루트 경로가 적용되어 버리는 이슈가 있다고 한다.
따라서 rootDir를 통해 내 프로젝트 내부에서만 경로가 적용 될 수 있도록 해야한다고 한다. (참 너무하다)