티스토리 뷰
발생일: 2013.05.29
문제:
Jasmine 으로 테스트 작성 시, Spy 로 쉽게 목 객체를 만들 수 있다고 한다.
문제:
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']);
반응형
댓글
공지사항