
다음 테스트를 선택하자. 이번에 추가할 사례는 다음이다.
[리스트 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책의 예제는 자바로 작성되어 있어 자바스크립트로 작성된 코드를 보여주는 것이 이 글의 목적이기 때문에 많은 설명들이 빠져 있습니다.
💡 책과 함께 코드를 보는 것을 추천드립니다.