티스토리 뷰
교재 : [Angular Development with TypeScript]
링크 : https://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791186710159
*Angular에 대해서 alpaco 사이트에서 학습하고 내용을 정리하였습니다.
Chapter07. 유닛 테스트
학습목표 :
1. 유닛 테스트와 엔드 투 엔드 테스트의 개념에 대해 설명할 수 있다.
→유닛 테스트(Unit testing): 컴포넌트나 함수 단위의 작은 코드를 테스트하며, 입력하는 데이터를 바꿔가면서 원하는 동작을 실행하는지 검사하는 방식이다. 엔드 투 엔드 테스트(End-to-end testing): 애플리케이션 완전히 동작하는 상태에서 사용자의 행동에 따라 애플리케이션의 각 부분이 정해진 대로 동작하는지 확인하는 방식이다.
2. 함수 테스트와 클래스 테스트의 개념에 대해 설명할 수 있다.
→함수 테스트: 문자열로 인자로 받아 대문자로 변환하는 함수가 있다고 하자. 그러면 이 함수를 테스트하기 위해 null, undefined, 빈 문자열, 소문자 단어, 대문자 단어, 대소문자가 섞인 단어, 숫자를 인자로 전달하는 테스트 케이스를 만들 수 있다.
클래스 테스트: 클래스 안에 함수가 있는 경우는 이 메소드들이 제대로 동작하는지 확인하는 테스트 스펙을 각각 작성하고, 이 스펙들을 묶어 테스트 스윗을 구성할 수 있다. Angular에서는 서비스도 클래스이기 때문에, 이 방법으로 서비스를 테스트할 수 있다.
3. Karma의 개념에 대해 설명할 수 있다.
→Karma는 원래 AngularJS 팀 내부에서 사용하려고 만든 테스트 러너지만, 이제는 JavaScript 코드를 테스트하는 일반적인 도구가 되었다.
또 Karma는 Node.js로 작성되었기 때문에 커맨드창에서 여러 브라우저를 동시에 띄우면서 애플리케이션이 제대로 동작하는지 확인할 수 있다.
학습내용 :
학습요약 :
• 애플리케이션 코드는 정기적으로 테스트해야 하며, 필요할 때마다 실행할 수 있도록 테스트 과정을 자동화해야 한다. 테스트 스크립트를 작성해두고 최대한 자주 실행하면, 나중에 큰 문제가 되어 돌아오는 것을 막을 수 있다.
• 유닛 테스트(Unit testing): 컴포넌트나 함수 단위의 작은 코드를 테스트하며, 입력하는 데이터를 바꿔가면서 원하는 동작을 실행하는지 검사하는 방식이다.
• 엔드 투 엔드 테스트(End-to-end testing): 애플리케이션 완전히 동작하는 상태에서 사용자의 행동에 따라 애플리케이션의 각 부분이 정해진 대로 동작하는지 확인하는 방식이다.
• 부하 테스트(Load testing)나 스트레스 테스트(Stress testing)는 애플리케이션이 얼마나 많은 동시 접속자를 처리할 수 있는지 테스트하는 방법이며, 애플리케이션보다는 서버의 성능을 테스트화하는 방법이다.
• Jasmine을 사용하면 특정 행동에 대한 반응을 정의하는 방식(BDD, behavior-driven development)으로 개발을 진행할 수 있다. 예를 들면 “ApplicationComponent 인스턴스가 제대로 생성되어야 해”라는 식으로, 코드가 정상적으로 실행되었을 때의 행동을 문장으로 기술하는 방식이다.
• Jasmine에서는 테스트 케이스 하나를 스펙(spec)이라고 하고, 하나 이상의 스펙을 묶은 것을 스윗(suite)이라고 한다.
• Angular 애플리케이션은 함수와 클래스, 컴포넌트를 테스트할 수 있다.
함수 테스트: 문자열로 인자로 받아 대문자로 변환하는 함수가 있다고 하자. 그러면 이 함수를 테스트하기 위해 null, undefined, 빈 문자열, 소문자 단어, 대문자 단어, 대소문자가 섞인 단어, 숫자를 인자로 전달하는 테스트 케이스를 만들 수 있다.
클래스 테스트: 클래스 안에 함수가 있는 경우는 이 메소드들이 제대로 동작하는지 확인하는 테스트 스펙을 각각 작성하고, 이 스펙들을 묶어 테스트 스윗을 구성할 수 있다. Angular에서는 서비스도 클래스이기 때문에, 이 방법으로 서비스를 테스트할 수 있다.
컴포넌트 테스트: 컴포넌트에서 외부로 공개된 API를 테스트할 수 있다. 여기에서 말하는 공개된 API는 외부에서 접근할 수 있는 프로퍼티나 함수를 의미한다.
• Angular는 Jasmine의 describe(), it(), xit() 함수를 랩핑한 테스트 라이브러리를 지원하며, 추가로 async(), fakeAsync()와 같은 함수도 제공한다.
• Angular 테스트 라이브러리의 NgMatchers 인터페이스는 다음과 같은 매처를 제공한다.
toBePromise(): 프로미스여야 한다.
toBeAnInstanceOf(): 인자로 전달하는 클래스의 인스턴스여야 한다.
toHaveText(): 인자로 전달하는 문자열이 엘리먼트의 문자열에 있어야 한다.
toHaveCssClass(): 인자로 전달하는 CSS 클래스가 엘리먼트에 지저오딘 클래스 중에 있어야 한다.
toHaveCssStyle(): 인자로 전달하는 CSS 스타일이 엘리먼트의 스타일 중에 있어야 한다.
toImplement(): 인자로 전달하는 인터페이스로 구현된 클래스여야 한다.
toContainError(): 인자로 전달하는 문자열이 예외 객체 있어야 한다.
toThrowErrorWith(): 평가하는 함수에서 에러가 발생하고, 인자로 전달하는 문자열이 이 에러에 있어야 한다.
toMatchPattern(): 인자로 전달하는 정규표현식에 적합한 문자열이어야 한다.
• JavaScript 애플리케이션을 Jasmine 프레임워크로 테스트할 때 JavaScript나 TypeScript로 직접 작성한 테스트 스윗을 사용할 수 있는데, 이 테스트 케이스 정의 파일은 애플리케이션 파일과 같은 폴더에 두고 함께 관리할 수도 있고, 다른 폴더에 두고 용도에 맞게 실행할 수도 있다.
컴포넌트와 관련된 팡리을 전부 한 폴더에서 관리할 수 있다. 컴포넌트를 구성하는 .ts, .html, .css 파일이 있는 폴더에 테스트 정의 파일인 .spec.ts 파일을 함께 두면 폴더를 새로 만들 필요도 없다.
애플리케이션 구성요소가 있는 곳에 테스트 케이스 파일도 있기 때문에 SystemJS 설정을 수정할 필요가 없다. 이미 저장된 SystemJS 대상 폴더에서 테스트 케이스 정의 파일만 불러와 테스트를 실행할 수 있다.
• 라우터를 테스트하려면 테스트 스펙에서 navigate() 함수는 navigateByUrl() 함수를 사용한다. 이때 라우터 설정을 인자로 받아 테스트하려면 navigate() 함수를 사용하고, 원하는 주소를 문자열로 받아 테스트하려면 navigateByUrl() 함수를 사용한다.
• 컴포넌트는 클래스와 템플릿으로 구성되는데, 클래스에 있는 메소드는 일반 함수를 테스트하는 것과 같은 방법으로 테스트할 수 있으며, 템플릿은 바인딩된 데이터가 제대로 표시되는지 확인하는 방식으로 테스트할 수 있다.
• Karma는 원래 AngularJS 팀 내부에서 사용하려고 만든 테스트 러너지만, 이제는 JavaScript 코드를 테스트하는 일반적인 도구가 되었다. 또 Karma는 Node.js로 작성되었기 때문에 커맨드창에서 여러 브라우저를 동시에 띄우면서 애플리케이션이 제대로 동작하는지 확인할 수 있다.
'웹개발 > Angular' 카테고리의 다른 글
[Angular] 08. 번들링과 배포 (1) | 2018.09.08 |
---|---|
[Angular] 06. 서버와 데이터 주고받기 (0) | 2018.09.08 |
[Angular] 05. 컴포넌트 통신과 폼 처리하기 (436) | 2018.09.08 |
[Angular] 04. 바인딩, 옵저버블, 파이프 (0) | 2018.08.26 |
[Angular] 03. 의존성 주입 (0) | 2018.08.26 |
- Total
- Today
- Yesterday
- 옵저버블
- npm
- Angular
- git commit
- Webpack
- End-to-End testing
- 웹 소켓 프로토콜
- typeScript
- NgForm
- 번들링
- Angular CLI
- 한영 변환
- angular2
- git merge
- 아이오닉
- Grunt
- paralles desktop
- 아이오닉2
- Facebook AccountKit
- password validation
- Routes
- Gulp
- phone number
- 의존성 주입
- git branch
- jQuery
- ionic2
- 폼 유효성 검사
- Typescript 패키지
- module exports
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |