2013-03-02 59 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

這是有道理的,但是如果我的對話框在另一個模塊中被使用,覆蓋將不得不被注入到兩個層次。例如另一個模塊(對話框,疊加層),對話框(疊加層)等等......這就是爲什麼我在對話框腳本中調用新的Overlay(),但是這樣可以正確測試嗎? – user502014 2013-03-03 10:18:33

+0

它在第二個例子中解釋過 – 2013-03-03 10:22:48