카테고리 없음

nestjs jest unit test 'Cannot find module' 문제 해결

코드냠냠꿀꺽 2022. 11. 21. 20:00

Nestjs로 진행한 프로젝트에서 jest를 사용하여 unit test를 해보려고 했는데 오류가 발생했다.

현재 나의 코드는 testing module 생성만 해놓은 상황이었다.

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [BossRaidController],
      providers: [
        {
          provide: BossRaidService,
          useFactory: mockBossraidService,
        },
      ],
    }).compile();
    controller = module.get<BossRaidController>(BossRaidController);
    service = module.get<BossRaidService>(BossRaidService);
  });

구글링을 해보니,, 내가 각 파일에서 다른 모듈을 import 할 때 vscode에서 자동으로 생성해주는 import를 그래로 냅뒀더니 절대경로인 src/로 import가 되어있었다!
알아보니 nest에서 기본적으로 설정되어있는 Jest의 module 찾는 방식은 상대경로이고, 절대 경로로 찾게 하려면 package.json file에서 moduleNameMapper 설정을 아래와 같이 해주면 된다고 한다.

{
  // ...

  "jest": {
    // ...

    "moduleNameMapper": {
      "^src/(.*)$": "<rootDir>/$1"
    }
  }
}

아니면 vscode에서 import 하는 방식 자체를 상대경로로 하게끔 만들면 된다고 한다.

방법은

1. vscode 설정에서 Preferences: Import Module Specifier 검색

2. relativ로 변경
나는 vscode 설정을 변경하는 방식으로 진행하였다.

변경후 테스트 성공!

 

참고링크