티스토리 뷰

Programming language/javascript

jasmine 기본

hello-world 2016. 1. 22. 18:03
728x90
반응형

책보고 이것저것 해봤는데 자꾸 까먹는......


Angularjs에서 jasmine 테스트 기본 사항~

http://jasmine.github.io/ 


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(); //지정한 컨트롤러의 인스턴스를 생성한다.
}));


728x90
반응형
댓글