Nest can't resolve dependencies of the xxx. Please make sure that the argument xxxx at index [x] is available in the RootTestModule context


Jest로 테스트코드 짜는데 계속 발생하는 에러.

모듈을 짤때와 똑같이 적어주어야 한다.

실제 코드 module에는 imports가 있었는데 테스트코드에는 안넣어줬더니 생긴 에러였음

const userModule: TestingModule = await Test.createTestingModule({
  imports: [TypeOrmModule.forFeature([User, Comment])],
  providers: [
    UsersService,
    {
      provide: getRepositoryToken(User),
      useClass: MockUserRepository,
    },
  ],
}).compile();

이렇게 똑같이 설정해주면 됨


잠깐

근데 이게 문제가 아니었음.

저런식으로 주입을 해주면 정말 한도 끝도없이 모든걸 주입해주어야 함…

저렇게 추가하다보니까 레디스 캐시매니저까지 주입해줘야하는 상황이 생겼는데..

거기까지 가보니까 ‘뭔가… 이거 잘못된거같은데… 이게 아닌거같은데…’ 하는 생각이 들어서 다시 롤백으로

되돌아왔다.

그리곤 생각했다…

뭐지…. 뭐가 문제지….

??

어디서부터 어디까지 넣어줘야하는거지…………..

그리고 또 구글신을 열심히 뒤지고 + 생각을 해본 결과

어짜피 테스트코드는 실제로직의 컨트롤러 혹은 서비스를 넣어주는게 아니라 내가 모킹한 컨트롤러나 서비스를 넣어주는것이므로

만약 실제 컨트롤러에 provider로 DI해준 엔티티가 있다면

provide: getRepositoryToken(ImageUser) 을 가져온다

import { getRepositoryToken } from '@nestjs/typeorm';
import { ImageUser } from 'src/apis/imageUser/entities/imageUser.entity';
import { Repository } from 'typeorm';


const userModule: TestingModule = await Test.createTestingModule({
  providers: [
    UserService,
    {
      provide: getRepositoryToken(User),
      useClass: MockUserRepository
    },
    {
      provide: getRepositoryToken(ImageUser),
      useValue: {}
    }
  ]
}).compile();

그리고 useValue 에는 아무것도 넣어주지 않는거다.

그러면 User의 provider는 빈값을 참조해서 테스트를 하게 된다.




© 2018. by sora

Powered by sora