Jasmine
BDD 사상을 가지고 구현 된 테스팅 프레임워크.
- Introducing BDD - http://blog.jaigurudevaom.net/319
- BDD wikipedia - https://en.wikipedia.org/wiki/Behavior-driven_development
- BDD와 TDD의 차이 - http://blog.aliencube.org/ko/2014/04/02/differences-between-bdd-and-tdd/
Jasmine 설치
NPM을 이용 해 jasmine을 머신에 설치한다.
프로젝트 초기화
jasmine init 명령어로 jasmine 프로젝트를 생성한다.
프로젝트 디렉토리 안에 위와 같은 구조의 파일이 생겨남
spec
jasmine test script가 저장되는 디렉토리
support
jasmine test를 위한 설정파일이 존재하는 디렉토리
jasmine.json
jasmine test project의 설정파일
기존 프로젝트에 Jasmine 적용해 보기
hello-jasmine 프로젝트
요구사항
일단 jasmine적용에 대한 내용에 앞서, 간단한 가상의 프로젝트를 하나 정의해 본다. 요구사항은 아래와 같음.
- 웹페이지가 하나 있는데, 웹 페이지가 로드 되고 나면 console창에 hello 라는 텍스트를 출력해야 함.
끝.
디자인 스크래치
구현에 대한 간단한 스크래치를 해 보고, 구현체들에 대한 디자인을 간략하게 정의 해 보자.
- 웹페이지가 하나 있어야 하므로, html을 하나 만들어 준다.
- 웹페이지가 로드되고 나서 console에 텍스트를 출력해야 하니, 그에 필요한 js파일이 필요하다.
좀 더 수월한 TDD를 위해 몇가지 더 생각해 보자.
- console에 출력하는 스크립트를 테스트 하기 위해, 모듈화를 해야한다.
- hello 텍스트를 리턴하는 함수를 하나 만들자.
hello-jasmine 프로젝트 구성
소스를 저장 할 src 디렉토리와 jasmine test를 위한 jasmine 디렉토리를 생성함.
src 디렉토리에 index.html을 생성하고, 콘솔에 hello를 출력하는 스크립트를 저장 할 js 디렉토리를 만든다.
index.html을 다음과 같이 만들어 본다.
hello-jasmine.js를 생성해 준다.
기본적인 틀은 다 잡혔으니 tdd를 위한 jasmine 테스트 코드를 작성해 본다.
테스트 코드를 작성해 보자.
(테스트 코드에 사용되는 함수들의 이름이 꽤나 인상적임.)
hello-jasmine.js에 대한 행위가 모두 정의되었으면 한번 테스트를 돌려본다.
테스트를 모두 통과 할 때까지 열심히 디버깅 한다.
hello-jasmine.js
첫번째 스펙 만족시키기
일단 첫번째 행동에 대한 스펙을 만족시키기 위해 export를 해서 undefined가 되지 않도록 하자.
저장하고 다시 테스트를 돌려보면..
첫번째 테스트를 통과한다.
module.exports를 사용하는 이유
jasmine이 구동되는 환경이 nodejs다 보니, 부득이하게 front-end script에 module.exports 객체에 매핑시키는 함수가 포함이 되었다.
jasmine을 webpage로 구성하여 nodejs대신 테스트를 수행할 수도 있지만.. 이럴 경우 자동화 구성이 다소 까다로워 지는 단점이 있다.
다음은 두번째 스펙
모듈이 가진 getHello가 함수가 되도록 해야한다.
웹페이지 에서도 출력 되어야 하니 일단 global로 함수를 선언 하고, exports에 포함시키도록 하자.
다시 jasmine 스펙 문서를 돌려 보면..
이제 하나만 더 만족 시키면 됨.
마지막 스펙 hello 출력하기
getHello 함수에 hello를 리턴 하도록 해서, 마지막 스펙도 만족 시킬 수 있도록 한다.
다시 jasmine을 돌려보면..
모든 스펙을 만족하는 코드가 만들어 졌다.
완성 된 hello-jasmine.js를 웹 페이지에 적용하기
아까 작성한 index.html의 body태그에 script를 불러와서, DOM이 완전히 로드되고 스크립트가 실행될 수 있도록 한다.
'Software Development' 카테고리의 다른 글
Docker Rex-ray 볼륨 드라이버 플러그인 소개 (0) | 2017.08.26 |
---|---|
Vagrant, Openstack, Jenkins, Ansible을 활용한 통합 테스팅 환경 CI-CD 환경 구축 (0) | 2016.08.10 |
flask-mongoengine을 uwsgi에서 사용할 때 주의할 점. (1) | 2016.04.08 |
JAVA - FileInputStream FileReader 차이점. (0) | 2011.10.25 |
VHDL - 예약어, 연산자 요약 (0) | 2011.03.15 |