2013-03-02 4 views
2

외부 종속성을 테스트하기 위해 재스민을 사용하는 가장 좋은 방법은 궁금합니다.재스민 + 외부 종속성 테스트

function Overlay() { 

} 

Overlay.prototype.show = function() { 

} 

Overlay.prototype.hide = function() { 

} 

이이 완료 재스민 단위 테스트를 설정 한 :

예를 들어 나는 순전히 배경 마스크를 보여 주거나 감 춥니 다 오버레이 모듈을 가지고있다. 내가 오버레이에서 떨어져 모든 대화 상자를 테스트 재스민 검사를

function Dialog() { 

} 

Dialog.prototype.show() { 
//do dialog stuff here, then show overlay 
var overlay = new Overlay(); 
overlay.show(); 
} 

:

나는 다음 오버레이 모듈을 사용하는 다른 모듈 대화 상자가 있습니다. 오버레이 단위 테스트가 설정되고 전달된다는 가정하에, 대화 상자 테스트에서는 var 오버레이가 정의되고 show 메서드가 호출되었는지 확인해야합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 사전에

덕분에

답변

3

가장 좋은 방법은 대화의 생성자에 오버레이의 인스턴스를 주입하는 것입니다.

function Dialog (overlay) { 
    this.overlay = overlay: 
} 

Dialog.prototype.show() { 
this.overlay.show(); 
} 

당신은 스파이를 주입 할 수 있습니다.

var overlay = {show: jasmine.createSpy()}; 
var dialog = new Dialog(overlay); 
dialog.show(); 
expect(overlay.show). toHaveBeenCalled(); 

또 다른 방법은 글로벌 Overlay 기능을 감시하고 show 기능에 스파이가있는 객체를 반환하는 것입니다.

var overlay = {show: jasmine.createSpy()}; 
jasmine.spyOn(Overlay, 'show').andReturn(overlay); 
var dialog = new Dialog(overlay); 
dialog.show(); 
expect(overlay.show). toHaveBeenCalled(); 
+0

내 대화 상자가 다른 모듈에서 사용될 때 오버레이는 두 단계로 주입되어야합니다. 예를 들어, anotherModule (대화 상자, 오버레이), 대화 상자 (오버레이) 등 ... 내 대화 스크립트에서 새 Overlay()를 호출하는 이유는이 방법으로 올바르게 테스트 할 수 있습니까? – user502014

+0

두 번째 예에서 설명합니다. –