Entity
를만들때 Enum
부분에대한 Register
부분을 까먹음.. 아침에 바로추가Jest
: Resolver
에대한 Testcode
는 짜본적이 없어 일단 만들지않고 PR을 보냈는데 피드백으로 Resolver
부분도 만들어보라고 하셔서 끙끙대면서 만들어봤다.. 레퍼런스코드를 보면서 만들어보니까 생각보다 그렇게 어렵진않아서 주말에 주간회고
를 할때 TDD
에대한 부분을 더 자세히 적어봐야겠음
Today Sprint
- 어제 만든
MockUp
형식의 API를 실제 관계테이블들을 만들어 생성할수있도록 수정- 수정한 코드를 TDD에도 반영해
Resolver
와Service
를Jest
를 통해Test
N:M테이블 TDD코드 관련 참고사항
Service.test
1.service
테스트 에선 테스트하려는service
단에서 생성자로 가지고있는 모든Repository
를Mocking
해줘야한다.
beforeEach(async () => {
const myDB01Module = await Test.createTestingModule({
providers: [
myDB01Service,
{
provide: getRepositoryToken(myDB01),
useClass: MockmyDB01Repository,
},
{
provide: getRepositoryToken(myDB02),
useClass: MockmyDB02Repository,
},
],
}).compile();
myDB01Service = myDB01Module.get<myDB01Service>(myDB01Service);
myDB01Repository = myDB01Module.get<MockRepository<myDB01>>(
getRepositoryToken(myDB01),
);
myDB02Repository = myDB01Module.get<MockRepository<myDB02>>(
getRepositoryToken(myDB02),
);
});
1.TestingModule을 만들때 원본Repository와 관계가있는 Repository(service
에서 사용하는)도 같이 만들어서 Mocking
type MockRepository<T = any> = Partial<Record<keyof Repository<T>, jest.Mock>>;
class MockCourseRepository {
mydb02 = [...];
mydb: any[] = [
{
...,
N:M:mydb02
},
];
count() {
return this.mydb.length;
}
findOne({ title }) {
return this.mydb.find((e) => e... === ...);
}
save({ mydb02, ...mydb01 }) {
const testResult = { ...mydb01, mydb02: mydb02 };
this.mydb.push(testResult);
return { ...mydb01, mydb02 };
}
find() {
return this.mydb;
}
}
class MockmyDB02Repository {
mydb02 = [...];
findOne({ name }) {
return this.mydb02.find((e) => e... === ...);
}
save(aaa: string) {
this.mydb02.push({ aaa });
return aaa;
}
}
이런형식으로 N:M관계에서 Repository코드를 흉내내서 만들어야한다
이런형식으로 만들어 jest.spyOn
등등.. 기존에 쓰던 Testcode를 그대로 쓸수있어서 좋았음
Resolver Test
Resolver에선 Service를 단일상속받기때문에 크게 달라지지 않았지만, N:M으로 만들어진 객체를 가상으로 만들어 테스트해야했기때문에
const myTestN: TestN = {
...,
TestMs: [],
};
const myTestN2: TestN = {
...
TestMs: [],
};
const myTestM: TestM = {
...,
TestNs: [myTestN, myTestN2],
};
const myTestM2: TestM = {
...,
TestNs: [myTestN, myTestN2],
};
이런형식으로 제작했다.
내일은 1:1관계의 테이블및 될수있다면 현재 만드는 API부분을 쿼리빌더로 교체하는작업을 시작하고싶다....