TIL - 220702(금)

Jason Moon·2022년 7월 1일
0

TIL

목록 보기
24/47

실전프로젝트 시작하고 거의 TIL을 적지 못했다.
내가 맡은 부분인 socket.io와 webRTC를 공부하는데 많은 시간을 보냈다. 프론트와 맞춰가며 해야했지만 아직 프론트 팀원들이 회원가입, 블로그 메인페이지 작업을 하고 있어서 같이 맞춰보지 못했다.
그래서 우선 기본적인 서버 코드만 작성해 놓고 타입스크립트와 테스트코드 공부를 하고 있다. 타입과 테스트 코드를 공부하니까 내가 작성하는 코드에 대해 조금 더 생각을 하면서 작성하게 된다. 아직 완전 초보 수준이여서 실전프로젝트를 하며 꾸준히 공부할 생각이다.


테스트 코드

테스트 코드를 작성하는 이유

우리가 작성한 코드, 기능이 원하는 대로, 예상한 대로 작동한다는 자신감을 가질 수 있다.

  • 기능이 정상 동작하는지 확인 할 수 있다.
  • 테스트 코드를 작성하면서 요구 사항에 어떤 것들이 있는지 확인하므로 요구 사항을 만족할 확률이 올라간다.
  • 이슈에 대해 예측 가능하다.
  • 버그를 빠르게 발견
  • 손쉬운 유지 보수(코드에 대한 자신감을 가질 수 있기 때문에)
  • 코드 품질 향상
  • 좋은 테스트 코드를 작성하려면 모듈, 클래스 간에 의존성을 낮춰야하기 때문에 코드 간 의존성을 낮출 수 있다.
  • 좋은 문서화(어떤 기능을 구현 할 때 코드 하나만 가지고 코드 리뷰를 요청한다든지 main repository에 merge를 한다던지 하면 이 코드를 어떻게 사용하는지 이해하기 힘들다. 하지만 테스트 코드와 함께 첨부하면 테스트 코드를 보며 어떤 상황에 어떻게 동작하는지 이해할 수 있다.)

Jest

유용한 API

beforeEach(fn, timeout)
class를 테스트 할 경우 각 테스트마다 인스턴스를 계속 생성해줘야 하는데 beforeEach를 쓰면 각 테스트가 시작하기 전에 인스턴스를 생성해준다.

const globalDatabase = makeGlobalDatabase();

beforeEach(() => {
  // Clears the database and adds some testing data.
  // Jest will wait for this promise to resolve before running tests.
  return globalDatabase.clear().then(() => {
    return globalDatabase.insert({testData: 'foo'});
  });
});

test('can find things', () => {
  return globalDatabase.find('thing', {}, results => {
    expect(results.length).toBeGreaterThan(0);
  });
});

test('can insert a thing', () => {
  return globalDatabase.insert('thing', makeThing(), response => {
    expect(response.success).toBeTruthy();
  });
});

이렇게 데이터베이스 정보를 불러오고 테스트 시작전에 초기화하는 역할로도 사용 가능하다.

describe(name, fn)
describe를 이용하면 관련있는 테스트들을 그룹지을 수 있다.

const myBeverage = {
  delicious: true,
  sour: false,
};

describe('my beverage', () => {
  test('is delicious', () => {
    expect(myBeverage.delicious).toBeTruthy();
  });

  test('is not sour', () => {
    expect(myBeverage.sour).toBeFalsy();
  });
});
profile
어려워 보여도 시간을 들여서 해보면 누구나 할 수 있는 일이다

0개의 댓글