[자바스크립트 코드로 ⌜테스트 주도 개발 시작하기⌟ 3.2.9] 다음 테스트 선택

Jerry·2023년 8월 27일

TDD

목록 보기
27/34
post-thumbnail

다음 테스트를 선택하자. 이번에 추가할 사례는 다음이다.

  • 2만 원을 지불하면 만료일이 두 달 뒤가 된다.
  • 3만 원을 지불하면 만료일이 석 달 뒤가 된다.

[리스트 3.18] ExpiryDateCalculatorTest 클래스에 2만 원 납부시 만료일이 두 달 뒤가 되는 테스트 추가

test("이 만원 이상 납부하면 비례해서 만료일 계산", () => {
  assertExpiryDate(
    new PayDataBuilder()
    .setBillingDate(new Date(2019, 2, 1))
    .setPayAmount(20000)
    .build(),
    new Date(2019, 4, 1)
  );
});


[리스트 3.19] 상수 대신 바로 구현

class ExpiryDateCalculator {
  calculateExpiryDate(payData) {
    let addedMonths = payData.payAmount / 10000; // 수정 부분
    if (payData.firstBillingDate !== null) {
      addedMonths +=
        payData.billingDate.getMonth() - payData.firstBillingDate.getMonth();
      return this.#addMonth(payData.firstBillingDate, addedMonths);
    }
    return this.#addMonth(payData.billingDate, addedMonths); // 수정 부분
  }

  #addMonth(date, month = 1) {
    // ...생략
  }
}

module.exports = ExpiryDateCalculator;

이제 3만 원을 납부하는 사례를 추가하자

test("이 만원 이상 납부하면 비례해서 만료일 계산", () => {
  assertExpiryDate(
    new PayDataBuilder()
    .setBillingDate(new Date(2019, 2, 1))
    .setPayAmount(20000)
    .build(),
    new Date(2019, 4, 1)
  );
  assertExpiryDate(
    new PayDataBuilder()
    .setBillingDate(new Date(2019, 2, 1))
    .setPayAmount(30000)
    .build(),
    new Date(2019, 5, 1)
  );
});

이 글은 아래 책을 토대로 작성된 글입니다.
최범균, ⌜테스트 주도 개발 시작하기⌟, 가메, 2020

책의 예제는 자바로 작성되어 있어 자바스크립트로 작성된 코드를 보여주는 것이 이 글의 목적이기 때문에 많은 설명들이 빠져 있습니다.

💡 책과 함께 코드를 보는 것을 추천드립니다.

profile
I'm jerry

0개의 댓글