AngularJS를 위한 Test 수행 방법을 생각해 보고, 테스트 전략에 대해서 다른 개발자는 어떻게 하고 있는지 알아보자
1. Angular Testing 에 대한 고찰
1-1. 스토리 보드 만들기
- 프로젝트 진행이 Agile Scrum 이라면 Story를 먼저 도출한다
- Story가 도출되었다면 스토리안에 Task를 나눈다 그리고 Task 별로 Validation(검증) 및 Processing(처리)해야할 것을 명세한다
- 명세는 스토리카드안에 간단히 적는다.
1-2. UX&UI 디자인
- 스토리에 맞는 화면의 목업(Mockup or WireFrame)을 그린다. Balsamiq같은 목업툴을 이용한다
- 화면 목업이 스토리에 부합되는지 확인 되면 스토리 개발 우선순위를 결정한다
- 결정된 화면의 HTML을 Bootstrap 또는 BootFlat을 이용하여 코드를 만든다. 저작툴이 Bootply를 이용해도 된다
1-3. TDD 수행하기 개발
- AngularJS 기반의 개발시 다음과 같이 진행을 한다 (AngularWay 참조)
+ View === AngularJS의 Directive가 포함된 HTML이다
+ Model === $scope를 통하여 Controller에서 Two way binding을 자동 수행한다
+ View와 Controller를 통하여 표현과 행위를 분리한다 (SoC)
+ AngularJS 애플리케이션 접근법
Step 1) Model을 먼저 생각하고 Service를 만든다
Step 2) Model이 표현될 View에 대해 생각해 보고 template을 만들고, 필요하면 자동 모델 바인딩되는 Directive도 만든다.
Step 3) 각 View 를 Controller에 연결한다 (ng-view and routing, ng-controller)
- E2E Testing
+ AngularJS의 Config의 Routing 에 대해 E2E Test 수행
+ Model을 표현하는 template에 대해 E2E Test 수행
+ Directives를 HTML에 코딩하였다면 E2E Test 수행
+ Filter가 HTML에 표현되는 것이라면 E2E Test 수행
(Protractor 또는 Angular Test Scenario Runner 사용)
- Unit Testing
+ Model을 서버 또는 Controller로 부터 받으면 Service/Factory에 대하여 Validation과 XHR등 스팩에 대한 Unit Test 수행
+ Model을 가공 핸들링하여 View와 양방향 연동하는 Controller에 대한 Unit Test 수행
+ Directives/Filter 의 내부 로직에 대한 Unit Test 수행
(Mocha 기반의 Chai와 같은 expectation, assertion 사용)
1-4. 개발 툴체인
- Yeoman 을 통하여 AngularJS 스케폴딩 코딩을 한다 (참조)
- 1-3의 E2E 와 Unit Testing을 위하여 AngularJS의 Karma Test Framework안에서 사용하면 된다. 단, Protractor사용시 예외
2. 테스트 전략예 동영상
- AngularJS에 대한 Test 전략에 대한 동영상을 보자
+ testem을 통해 Unit Test를 수행
+ protractor를 통해 E2E Test를 수행
+ 제품 통합 테스트 수행을 위하여 Yeoman과 유사한 Lineman을 사용
+ Jasmine-given을 사용하여 Given-When-Then의 CoffeeScript 방식의 재미있는 테스팅도 소개함
- 새롭게 나온 E2E Test Framework인 Protractor for angularJS
+ Angular팀에서 새롭게 소개된 Protractor 느낌상 Karma E2E 보다는 더 간단하고 직관적인듯 하다.
<참조>
'Testing, TDD > Test First' 카테고리의 다른 글
[AngularJS] 최적 테스트 환경 - 2 (0) | 2013.10.21 |
---|---|
[AngularJS] 최적 테스트 환경 - 1 (0) | 2013.10.20 |
[QUnit] 클라이언트 코드 테스트의 강자 (0) | 2013.04.03 |
[Backbone.js] 클라이언트 코드를 Mocha로 TDD 수행하기 (0) | 2013.03.20 |
[Casper.js] Backbone.js 테스트를 위한 선택 (0) | 2013.03.13 |