• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

test 관련 질문드립니다!

22.07.15 12:19 작성 조회수 130

0

안녕하세요 제로초님! test관련 질문이 있어서 질문글 남깁니다 :)

아래와 같이 따로 Repository provider를 만들고

export const userProviders = [
  {
    provide: USER_REPOSITORY,
    useFactory: (dataSource: DataSource) => dataSource.getRepository(User),
    inject: [APP_DATABASE],
  },
];

 

Service에서 아래와 같이 @InjectRepository가 아니라 @Inject로 생성자를 구성했습니다. (USER_REPOSITORY는 따로 constants.ts파일을 만들어두었습니다.

@Injectable()
export class UserService {
  constructor(
    @Inject(USER_REPOSITORY)
    private userRepository: Repository<User>,
  ) {}
. . .

 

이후 Service 파일의 테스트 코드를 작성하는데 모킹이 안돼서 질문을 남기게 되었습니다.

. . . 
     providers: [
        UserService,
        {
          provide: getRepositoryToken(User),
          useValue: mockUserRepository,
        },
      ],
. . .

위와 같이 모킹했는데, 아래와 같은 오류가 떴습니다. ㅜㅜ

Nest can't resolve dependencies of the UserService (?). Please make sure that the argument USER_REPOSITORY at index [0] is available in the RootTestModule context.

    Potential solutions:
    - If USER_REPOSITORY is a provider, is it part of the current RootTestModule?
    - If USER_REPOSITORY is exported from a separate @Module, is that module imported within RootTestModule?
      @Module({
        imports: [ /* the Module containing USER_REPOSITORY */ ]
      })

      at TestingInjector.lookupComponentInParentModules (../node_modules/@nestjs/core/injector/injector.js:231:19)
      at TestingInjector.resolveComponentInstance (../node_modules/@nestjs/core/injector/injector.js:184:33)
      at TestingInjector.resolveComponentInstance (../node_modules/@nestjs/testing/testing-injector.js:16:45)
      at resolveParam (../node_modules/@nestjs/core/injector/injector.js:106:38)
          at async Promise.all (index 0)
      at TestingInjector.resolveConstructorParams (../node_modules/@nestjs/core/injector/injector.js:121:27)
      at TestingInjector.loadInstance (../node_modules/@nestjs/core/injector/injector.js:52:9)
      at TestingInjector.loadProvider (../node_modules/@nestjs/core/injector/injector.js:74:9)
          at async Promise.all (index 3)

 

 

답변 1

답변을 작성해보세요.

0

저 방식은 완전 원초적인 DB 주입 방식입니다. 기존 제 방식을 쓰시는 것을 추천드리고요. getRepositoryToken도 제 방식에서만 돌아갑니다.

provide: USER_REPOSITORY 하면 되지 않을까싶긴 합니다. 이 값이 @Inject랑 일치해야 하거든요.