Today I learned
테스트 코드 작성 중 문제가 발생했다
Nest can't resolve dependencies of the PhotospotService (?, S3Service). Please make sure that the argument PhotospotRepository at index [0] is available in the RootTestModule context.
의존성 주입을 위해서 module에다가 세팅을 해주는 부분이 있는데 테스트를 할 때 mock module을 만드는데 그 부분에 세팅해 주지 않아서 발생하는 문제인듯 하다
해결해보도록 하자
const app: TestingModule = await Test.createTestingModule({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
TypeOrmModule.forRootAsync({ useClass: TypeOrmConfigService }),
TypeOrmModule.forFeature([Photospot]),
NestjsFormDataModule.config({
storage: FileSystemStoredFile,
autoDeleteFile: false,
}),
],
controllers: [PhotospotController],
providers: [
PhotospotService,
S3Service,
S3ServiceProvider
],
}).compile();
필요한 것들을 모두 imports해주고 controllers와 providers도 세팅을해주면 문제가 해결된다
service 테스트 코드를 작성하고 테스트를 진행하는데 문제가 발생했다
Repository가 진짜로 실행이 되어서 데이터베이스에 접근하는 문제가 발생했다
문제를 해결하기 위해서 service를 mock Repository를 이용해 속이는 세팅이 필요하다
이 문제를 해결하기 위해서는 패키지가 하나 필요하다
npm install --save-dev sinon @types/sinon
sinon은 테스트를 도와주는 라이브러리다
sinon의 sandbox와 typeorm의 getRepositoryToken를 이용해서 모의 데이터베이스를 연결해서 가짜 Repository에 접근하게 세팅해서 데이터베이스에 접근하지 않게 만들면 문제는 해결이다
let sandbox: sinon.SinonSandbox;
beforeAll(async () => {
sandbox = sinon.createSandbox();
// 생략
providers: [
PhotospotService,
S3Service,
S3ServiceProvider,
{
provide: getRepositoryToken(Photospot),
useValue: sinon.createStubInstance(Repository),
},
],
// 생략
'과거공부모음' 카테고리의 다른 글
20230306 TIL - S3 파일 업로드 문제 (0) | 2023.03.06 |
---|---|
20230301 TIL - nestjs typeorm (0) | 2023.03.02 |
20230227 TIL - 최종프로젝트 (찰칵), nestjs-form-data (0) | 2023.02.27 |
20230222 TIL - nestjs AWS S3 file upload (2) | 2023.02.22 |
20230221 TIL - nestjs 이미지 업로드 (0) | 2023.02.21 |