2013-01-24 70 views
3

我剛開始使用sinon.js,我完全被這個術語所困擾。我已經使用了存根在subview's渲染方法被刪除的地方。但是對間諜的解釋我不清楚。任何人都可以解釋這兩者之間的區別究竟是什麼?間諜和存根有什麼區別?

也想知道如果我想測試一個新模型是否已經添加到一個集合將是什麼樣的方法?

回答

6

我對sinon.js不太熟悉,但由於這些是一般的TDD術語,而不是特定於sinon的術語,所以我認爲我仍然可以回答你的問題。

主要區別在於存根純粹是爲了「通過代碼」而存在;存根本身除了保存虛擬值和方法外不會做任何事情。

另一方面,間諜是存根,用於檢查放入其中的值或調用的方法。換句話說,兩者之間的主要區別是assert語句:存根沒有,而間諜有一些(或者它們存儲測試代碼中別處斷言的值)。

換句話說:

var Stub = Backbone.Model.extend(); 
var stub = new Stub({value: 'test value'}); 
// This can be fed to any view for testing 

var Spy = Backbone.Model.extend({ 
    initialize: function() { 
     this.on('change:value', this.handleValueChange); 
    }, 
    handleValueChange: function(value) { 
     assert(!isNaN(value)); 
    }; 
    value: 'test value' 
}); 
var spy = new Spy({value: 'test value'}); 
// This can be fed to any view for testing AND it ensures that, 
// if that view sets its "value", that that value is a number 

哦,回答:

而且想知道的方法是什麼,如果我想測試一個新的模式已被添加到一個集合?

同樣,沒有得到中興農具體而言,有兩個明顯的地方,你可以在模型上「間諜」:模式本身,以及其收藏。

要麼你可以添加一個事件處理程序(或硬連線到一個測試方法)你的模型,檢查this.collection,以確定是否/哪個集合被添加到。相反,您可以綁定事件或覆蓋集合本身的方法,並檢查this.models

+0

@machineghost ..謝謝你的回覆..我試圖將綁定到事件監聽器的處理程序存根,但仍然無法檢查修改後的集合。這裏有什麼正確的方法..使用間諜或存根 –

+0

一般存根更好,因爲更簡單的解決方案更好。用存根你只是:1.建立一個存根,2.將它傳遞給某個東西,3.堅決反對結果;簡單。你只想使用間諜:A)當你必須(因爲你測試的東西沒有暴露給你的測試代碼),或者B)更方便時(例如,因爲你正在做一堆相關的測試所有這些對相同的存根對象都做類似的斷言)......但所有這些似乎都不相關:聽起來像你真正的問題是你「無法檢查修改後的集合」。你能解釋一下嗎? – machineghost

+0

我有一個監聽器來添加新的集合。我爲此創建了一個存根,我試圖在此事件被解僱後檢查集合的長度。它在被解僱前後仍然顯示相同的數字。 –

相關問題