지난 payments 미션에서 카드 등록하는 기능을 구현하고, 그 카드가 submit 될 때 입력된 카드 정보가 올바른지에 대한 테스트를 작성했다. 테스트를 위해 react state를 참조하던 validateNewCard 를 순수 함수로 아래와 같이 변경했고, 이것을 export해서 test 코드에서 import 해서 테스트했다. 그런데 약간 찝찝한 점이 있었다. 이 validateNewCard를 private하게 쓰고 싶었기 때문이다. 다른 곳에서 사용하지 않을 예정이었기 때문이다(그떄의 설계 단계에서는). 그래도 방법을 잘 모르겠어서 이런 방법으로 테스트를 했는데.. 이번에도 같은 고민에 직면했다

Screen Shot 2022-03-04 at 11.16.44 AM.jpg

이렇게 만들어진  calculateExpectedPrice 순수 함수를 어떻게 private하게 테스트 할 수 있을까? 고민했고 답은 쉽게 찾아지지 않았다.

const calculateExpectedPrice = (selectedCartItems: CartItem[]) => {
    const PRICE_WHEN_SELECTED_NOTHING = 0;

    return selectedCartItems.reduce(
      (acc, { product, quantity }) => acc + product.price * quantity,
      PRICE_WHEN_SELECTED_NOTHING,
    );
  };

이 함수를 private하게 사용하고 싶었던 이유는 아래와 같다.

이런 고민을 하다가 스택오버플로어에 글을 올렸는데 아래와 같은 의견을 들을 수 있었습니다. 순수 함수니까 export 하는 것에 대해 너무 걱정하지 않아도 될 것 같습니다. 정확하게는 모르겠지만 rewire 라는 도움을 주는 모듈도 있는 것 같다.

Screen Shot 2022-03-04 at 10.46.20 AM.jpg

위와 같은 의견을 들을 수 있었는데 어차피 순수 함수이기 때문에 너무 private하게 사용하는 것에 집착하지 않아도 될 것 같다.

더불어 good tests are simple and easy to read !! 다시 한번 생각하게 되는 좋은 계기였다.