티스토리 뷰

Daylogs/Javascript

Jasmine Spy 사용하기

ohgyun 2013. 9. 16. 16:44


발생일: 2013.05.29

문제:
Jasmine 으로 테스트 작성 시, Spy 로 쉽게 목 객체를 만들 수 있다고 한다.
자세히 알아보자.


해결책:


spyOn(obj, methodName);

으로 특정 객체의 메서드를 목으로 만들 수 있다.


spyOn(foo, 'setBar');

expect(foo.setBar).toHaveBeenCalled();

.toHaveBeenCalled();
.toHaveBeenCalledWith('foo', 'bar');

foo.setBar.calls; // 호출 정보를 담아둔다. 각 호출의 전달 인자를 배열에 담고 있다.
.mostRecentCall; // 가장 최근의 호출
.mostRecentCall.args; // 가장 최근 호출의 인자



spyOn() 은 해당 메서드를 완전히 덮어버린다. 즉, 원본을 호출하지 않는다.
원본을 직접 호출하게 하려면 .andCallThrough()를 체이닝으로 호출한다.

spyOn(foo, 'setBar').andCallThrough();
// 동일하게 스파이 객체에 접근할 수 있지만, 원본 실행도 함께 한다.


spyOn(foo, 'getBar').andReturn(123);
// 해당 함수를 호출하고 특정 값을 리턴하게 한다.


spyOn(foo, 'getBar').andCallFake(function () {

});
// 해당 함수 대신 다른 함수를 호출하게 한다.

andThrow();



호출할 메서드가 없다면 빈 스파이 함수를 생성할 수 있다.

var spyFunction = jasmine.createSpy('foo');
spyFunction.identity; //--> foo. 스파이 함수의 아이디 


호출할 객체가 없다면 빈 스파이 객체를 생성할 수 있다.

var spyObj = jasmine.createSpyObj('foo', ['getName', 'setName']);



반응형
댓글
공지사항