[Co-Work]Day2

ShinJuYong·2022년 5월 10일
0

기업협업

목록 보기
2/8
post-thumbnail

기업협업 Day2

  • 어제보낸 PR에대한 피드백
    • Entity를만들때 Enum부분에대한 Register부분을 까먹음.. 아침에 바로추가
    • Jest : Resolver에대한 Testcode는 짜본적이 없어 일단 만들지않고 PR을 보냈는데 피드백으로 Resolver부분도 만들어보라고 하셔서 끙끙대면서 만들어봤다.. 레퍼런스코드를 보면서 만들어보니까 생각보다 그렇게 어렵진않아서 주말에 주간회고를 할때 TDD에대한 부분을 더 자세히 적어봐야겠음

Today Sprint

  • 어제 만든 MockUp형식의 API를 실제 관계테이블들을 만들어 생성할수있도록 수정
  • 수정한 코드를 TDD에도 반영해 ResolverServiceJest를 통해 Test

N:M테이블 TDD코드 관련 참고사항

Service.test
1. service테스트 에선 테스트하려는 service단에서 생성자로 가지고있는 모든 RepositoryMocking 해줘야한다.

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

  1. Mocking Repository Code
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부분을 쿼리빌더로 교체하는작업을 시작하고싶다....

0개의 댓글