Javascript/프로그래밍 기법

2. 모듈패턴으로 기존 코드 개선하기 - 견고한 JS 소프트웨어 만들기 | 김정환

AGAL 2021. 9. 2. 17:43
반응형

 

클릭 카운터 모듈 (ClickCounter)

: 카운터 데이터를 다루는 모듈 (전역 공간에 있는 counter 변수를 ClickCounter 안에서 관리하자)

 

 

첫번째 스펙 

"ClickCounter 모듈의 getValue() 는 카운터 값을 반환한다."

> git checkout --force ClickCounter-spec-1

  

 

두번째 스펙

"ClickCounter 모듈의 increase() 는 카운터 값을 1만큼 증가한다."

> git checkout --force ClickCounter-spec-2

 

beforEach는 it 함수 호출 직전에 실행되는 자스민 함수.

describe(() => {
  beforeEach(() => {})	// 1
  afterEach(() => {})	// 3
  it(() => {})		// 2
})

중복 코드를 beforeEach로 옮기자.

※ 중복 코드를 제거한 코드를 DRY(Don't Repeat Yourself) 하다.

 

 

 

클릭 카운트 뷰 모듈 (ClickCounte View)

카운터 데이터는 돔(DOM)에 반영되어야 한다. 데이터를 출력하고 이벤트 핸들러를 바인딩하는 일을 담당할 것이다.

 

 

첫번째 스펙

"ClickCounterView 모듈의 updateView()는 카운트 값을 출력한다."

> git checkout --force ClickCountView-spec-1

 

Q) 데이터를 조회할 ClickCounter를 어떻게 얻을까? 데이터를 출력할 돔 엘리먼트는 어떻게 테스트 할까?

A) 주입하자

 - ClickCounter는 객체를 만들어 파라미터로 전달 받자

 - 데이터를 출력할 돔 엘리먼트를 만들어 전달 받자

 

TDD  방식으로 사고하다 보면 이런 식으로 필요한 모듈을 주입받아 사용하는 경향이 생김

하나의 기능 단위로 모듈을 분리할 수 있기 때문에 단일 책임 원칙을 지킬 수 있다.

 

Q) ClickCountView에 의존성 주입이 되었는지는 어떻게 체크할까?

A) 의존성 주입을 테스트하는 코드를 작성한다.

 

 

두번째 스펙

"ClickCounterView 모듈의 increaseAndUpdateView()는 카운트 값을 증가하고 그 값을 출력한다."

> git checkout --force ClickCountView-spec-2

 

# 테스트 더블

단위 테스트 패턴으로, 테스트하기 곤란한 컴포넌트를 대체하여 테스트하는 것. 특정한 동작을 흉내만 낼뿐이지만 테스트 하기에는 적합하다.

  • 더미(dummy): 인자를 채우기 위해 사용
  • 스텁(sturb): 더미를 개선하여 실제 동작하게끔 만든 것. 리턴값을 하드코딩한다.
  • 스파이(spy): 스텁과 유사, 내부적으로 기록을 남기는 추가 기능
  • 페이크(fake): 스텁에서 발전한 실제 코드.
  • 목(mock): 더미, 스텁, 스파이를 혼합한 형태

 

자스민에서는 테스트 더블을 스파이스(spies)라고 부른다. spyOn(), createSpy() 함수를 사용할 수 있다.

 

 

세번째 스펙

"클릭 이벤트가 발생하면 increaseAndUpdateView()를 실행한다."

> git checkout --force ClickCountView-spec-3

 

클릭 이벤트 핸들러(increseAndUpdateView)를 바인딩할 돔 엘리먼트(triggerEl)를 주입 받자.

 

반응형