2015-03-31 22 views
0

我試圖使用sinon.spy來檢查play函數是否正在爲組件調用。問題是間諜計數器沒有更新,即使我已經確認我的組件的功能確實被調用。不使用Javascript調用或應用的Sinon間諜

我已經跟蹤它的使用JavaScript的call功能:

handleDone: function(e) { 
    for (var i = 0; i < this.components.length; i++) { 
    if (this.components[i].element === e.target) { 
     if (this.components[i].hasOwnProperty("play")) { 
     // This won't trigger the spy. 
     this.components[i]["play"].call(this.components[i].element); 
     } 
     break; 
    } 
    } 
} 

apply交換call當類似的事情發生。

[增訂] 下面是相關測試:

var page = document.getElementById("page"), 
    demo = document.getElementById("demo"), 
    playSpy; 

suiteSetup(function() { 
    playSpy = sinon.spy(demo, "play"); 
}); 

suiteTeardown(function() { 
    demo.play.restore(); 
}); 

suite("done", function() { 
    test("rise-component-done fired from element with play property", function() { 
    assert(playSpy.notCalled); //true 
    demo.sendDone(); 
    assert(playSpy.calledOnce); //false 
    }); 
}); 

而且在demo組件playsendDone功能:

play: function() { 
    console.log("play"); 
}, 

sendDone: function() { 
    this.dispatchEvent(new CustomEvent("rise-component-done", { "bubbles": true })); 
} 

page組件註冊爲監聽此事件:

this.addEventListener("rise-component-done", this.handleDone); 

任何人都知道解決方法?

Thx。

+0

你能舉一個例子說明你是如何做播放功能的間諜嗎?也許整個測試看看它是否可能來自那裏。 – Ben 2015-03-31 14:30:45

+0

我使用'call'完成了一個快速測試,它似乎可以工作:http://codepen.io/anon/pen/RNOwvB?editors=101 – Ben 2015-03-31 14:52:38

+0

我已經更新了更多細節。 – donnapep 2015-03-31 14:52:53

回答

0

所以這個問題實際上並不涉及到call的方法,正如Ben所說的那樣。很多修修補補之後,我意識到我必須改變這一行:

playSpy = sinon.spy(demo, "play"); 

這樣:

playSpy = sinon.spy(page.components[0], "play"); 

現在我的測試通過。萬歲!我只是希望它沒有讓我在一天中更好地進行調試。