-
Nestjs에서 테스트 코드 작성시 Nest can't resolve dependencies in the RootTestModule context 에러Nest.js/TDD 2024. 1. 9. 20:57728x90
Nest can't resolve dependencies of the ApmService (?). Please make sure that the argument dependency at index [0] is available in the RootTestModule context. Potential solutions: - If dependency is a provider, is it part of the current RootTestModule? - If dependency is exported from a separate @Module, is that module imported within RootTestModule? @Module({ imports: [ /* the Module containing dependency */ ] })
● ApmService › should be defined expect(received).toBeDefined() Received: undefined 56 | 57 | it("should be defined", () => { > 58 | expect(service).toBeDefined(); | ^ 59 | }); 60 | 61 | it("start should be called", () => { at Object.<anonymous> (libs/lib1/src/lib1.service.spec.ts:58:21)
toBeDefined로 제대로 정의 되어 있는지 검증하는 테스트 코드를 작성 했으나
의존성 추가 에러 에러가 발생했다.
처음엔 기존에 테스트 코드 작성하기전 해결 했던 방식대로 해당 모듈에서 필요한 provider를 추가 해서 해결 하려고 했으나
해결되지 않았다.
Test.createTestringModule 함수는 실제 module.ts파일과 아무런 연관이 없었다!!!
그렇다면 module.ts에 providers에 추가 해주지 않았는데도 왜 동작이 안하는건지 이해가 안됬다.여러번의 삽질 결과 예를들어 AmpService를 Test.createTestingModule에 providers에 추가해서 해당 AmpService에 대한 단위 테스트를 진행 할때 조심해야 되는게 있었다.
바로 해당 AmpService에서 만약에 의존성을 주입 해놓은 무언가가 있다면 그것또한
Test.createTestingModule에 선언 해주어야한다!!!
@Injectable() export class AmpService { constructor( private readonly ampRepository:AmpRepository ){} ... 중략 }
이런식으로 constructor에 의존성 주입을 받은게 있다면 그것또한 Test.createTestingModule에 추가 해주어야함.
describe('CurrenciesService', () => { let service: CurrenciesService; let repository: CurrenciesRepository; let mockData: Currencies; beforeEach(async () => { const currenciesRepositoryMock = { getCurrency: jest.fn(), createCurrency: jest.fn(), updateCurrency: jest.fn(), deleteCurrency: jest.fn(), }; const module: TestingModule = await Test.createTestingModule({ providers: [ CurrenciesService, { provide: CurrenciesRepository, useFactory: () => currenciesRepositoryMock, }, ], }).compile(); service = module.get<CurrenciesService>(CurrenciesService); repository = module.get<CurrenciesRepository>(CurrenciesRepository); mockData = { currency: 'USD', value: 1 }; }); it('should be defined', () => { expect(service).toBeDefined(); }); }); // CurrenciesService에서 CurrenciesRepository를 의존성 주입을 받아서 사용하고 있어서 // 해당 CurrenciesRepository를 privider에 추가해준 모습
728x90'Nest.js > TDD' 카테고리의 다른 글
e2e 테스트를 공부 하면서 save함수의 리턴값과 toEqual로 값비교 (0) 2024.03.20 왜 테스트 코드를 작성 해야 하는지 알게 된 경험(typeorm bigint 이슈) (0) 2024.03.19 nestjs-test-coverage에서 제외 파일 설정 (0) 2024.03.09 vscode - jest를 위한 Jest Extension 설치 (0) 2024.01.04 Nestjs에서 Type 'typeof supertest' has no call signatures (0) 2023.11.11