【发布时间】:2015-03-31 14:17:14
【问题描述】:
我正在尝试使用sinon.spy 检查是否正在为组件调用play 函数。问题是间谍计数器没有更新,即使我已经确认我的组件的函数确实被调用了。
我已经追踪到使用 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;
}
}
}
将call 替换为apply 时会发生类似的情况。
[更新] 这是相关的测试:
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);
有人知道解决方法吗?
谢谢。
【问题讨论】:
-
你能举一个例子来说明你是如何做play函数的间谍的吗?也许是整个测试,看看它是否可能来自那里。
-
我已经使用
call进行了快速测试,它似乎可以工作:codepen.io/anon/pen/RNOwvB?editors=101 -
我已经更新了更多细节。
标签: javascript unit-testing sinon