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
組件play
和sendDone
功能:
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。
你能舉一個例子說明你是如何做播放功能的間諜嗎?也許整個測試看看它是否可能來自那裏。 – Ben 2015-03-31 14:30:45
我使用'call'完成了一個快速測試,它似乎可以工作:http://codepen.io/anon/pen/RNOwvB?editors=101 – Ben 2015-03-31 14:52:38
我已經更新了更多細節。 – donnapep 2015-03-31 14:52:53