티스토리 뷰
책보고 이것저것 해봤는데 자꾸 까먹는......
Angularjs에서 jasmine 테스트 기본 사항~
describe('테스트 설명', function(){
//테스트 전처리
before(function(){ });
//테스트 후처리
after(function(){})
//it 함수 실행할 때마다 같이 실행되는 전처리
beforeEach(function(){ });
//it 함수 실행할 때마다 같이 실행되는 후처리
afterEach(function(){ });
if('테스트 설명', function(){
//테스트
});
});
단위테스트를 작성할 때 준비/행동/확인 패턴
* 준비 - 테스트에 필요한 시나리오를 설정하는 과정
* 행동 - 실제 테스트를 수행하는 과정
*확인은 올바른 결과가 나왔는지 검사하는 과정
* describe - 관련 테스트 여러 개를 그룹으로 지정.테스트 코드를 조직화하는 데 도움.
* beforeEach - 각 테스트 전에 함수를 실행(준비과정)
* it - 테스트를 수행하기 위한 함수를 실행(행동단계)
* expect - 테스트 결과를 확인 (확인단계)
* toEqual - 테스트 결과를 예상 결과와 비교한다.( 테스트 확인의 또 다른 단계 )
결과 확인을 위한 jasmine 함수
expect(x).toBeFalsy() |
x가 false이거나 false로 평가되는지 확인. |
expect(x).toEqual(val) |
x가 val과 같은 값을 갖는지 확인한다.( 같은 객체일 필요는 없다 ) |
expect(x).toBe(obj) |
x 및 obj가 같은 객체인지 확인. |
expect(x).toMatch( regexp ) |
x가 지정한 정규식과 일치하는지 확인. |
expect(x).toBeDefined() |
x가 정의돼 있는지 확인. |
expect(x).toBeUndefined() |
x가 정의돼 있지 않은지 확인. |
expect(x).toBeTruthy() |
x가 true이거나 true 로 평가되는지 확인. |
expect(x).toBeFalsy() |
x가 false이거나 false로 평가되는지 확인. |
expect(x).toContain(y) |
x가 y를 포함하는 문자열인지 화인한다. |
expect(x).toBeGreaterThan(y) |
x가 y보다 큰지 확인. |
angular 1.x버전을 예전 책들을 보고 테스트 하다보면 $httpBackend 호출시 에러가 나는 것을 볼 수 있는데
그럴때 아래와 같은 방법으로 해결..
1. 매개변수로 바로 주입시엔 _$httpBackend_
2. $injector 를 매개변수로 주입해 $injector.get('$httpBackend') 이런식으로 호출.
아래는 예제 코드.
var httpBackend;
//1번째방법 $injector로 주입.
beforeEach(inject(function($injector) {
httpBackend= $injector.get('$httpBackend');
//기대한 요청에 대한 응답을 정의한다.
httpBackend.expect('GET', 'productData.json').respond(
[
{'name':'Apples', 'category':'Fruit', 'price':1.20 },
{'name':'Bannas', 'category':'Fruit', 'price':2.42 },
{'name':'Pears', 'category':'Fruit', 'price':2.02 },
]
)
}));//2번째방법 _$httpBackend_ 로 주입.
beforeEach(inject(function(_$httpBackend_) {
httpBackend= _$httpBackend_;
//기대한 요청에 대한 응답을 정의한다.
httpBackend.expect('GET', 'productData.json').respond(
[
{'name':'Apples', 'category':'Fruit', 'price':1.20 },
{'name':'Bannas', 'category':'Fruit', 'price':2.42 },
{'name':'Pears', 'category':'Fruit', 'price':2.02 },
]
)
}));
- 참고로 angular.mock 객체에서 $httpBackend 서비스 실행시 꼭 flush메서드를 호출해야 한다.
( flush() 메서드를 호출하기 전까지 응답을 전송하지 않기 때문 )
beforeEach(inject(function($controller, $rootScope, $http) {
mockScope=$rootScope.$new();
controller=$controller('defaultCtrl', {
$scope:mockScope,
$http:$http
});
httpBackend.flush(); //지정한 컨트롤러의 인스턴스를 생성한다.
}));
'Programming language > javascript' 카테고리의 다른 글
구글 자바스크립트 컴파일러 (0) | 2016.02.19 |
---|---|
마우스 스크롤 스피드제어 (0) | 2016.02.16 |
JavaScript Kinetic Scrolling (0) | 2015.12.17 |
document height 구하기(cross browser) (0) | 2015.12.07 |
교환이미지 파일 형식- exif(EXchangable Image File format) JS (0) | 2015.12.04 |
- Total
- Today
- Yesterday
- for of 구문
- 리프래시토큰
- svg 폰트
- RefreshToken
- 내장요소
- React.StrictMode
- JsDoc
- IntrinsicElements
- interceptors
- svg모션
- 반복문
- icon font
- 앵귤러
- Intrinsic
- react
- git checkout -b
- 코도바
- react-router-dom
- Vue3
- 아이콘 폰트 만들기
- 태그
- 자바스크립트
- Angular
- Aptana
- svg icon font
- git
- anime.js
- cordova
- vue-router
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |