-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
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)
답변을 작성해보세요.
0
조현영
지식공유자2022.07.15
저 방식은 완전 원초적인 DB 주입 방식입니다. 기존 제 방식을 쓰시는 것을 추천드리고요. getRepositoryToken도 제 방식에서만 돌아갑니다.
provide: USER_REPOSITORY 하면 되지 않을까싶긴 합니다. 이 값이 @Inject랑 일치해야 하거든요.
답변 1