基本上,如果您使用 Sinon.js 模拟对象,该对象具有作为回调传递给 jQuery.delegate 的属性,当您触发在 jQuery.delegate 中观察到的方法时,您的模拟期望将失败。如果您在用作 jQUery.delegate 回调的匿名函数主体内执行该方法,您的期望将通过。
test("FAILS: 处理程序作为回调直接从 jQuery 委托方法调用...", function() {
var 控制器,
看法,
$el,
C,
五,
嘲笑;
控制器 = 函数() {
变量自我 = {};
self.handler = 函数(e){
console.log("得到处理");
};
回归自我;
};
视图 = 函数($el,控制器){
变量自我 = {};
self.render = 函数() {
$el.html("");
$el.delegate("#derp", "keyup", controller.handler);
};
回归自我;
};
$el = jQuery("");
c = 新控制器();
v = 新视图($el, c);
模拟 = this.mock(c);
v.render();
mock.expects("handler").once();
$el.find("input").val("bar").trigger("keyup");
相等($el.find(“输入”).val(),“酒吧”);// 通过!
模拟.验证();
});
test("WINS: 处理程序在匿名函数中被调用...", function() {
var 控制器,
看法,
$el,
C,
五,
嘲笑;
控制器 = 函数() {
变量自我 = {};
self.handler = 函数(e){
console.log("得到处理");
};
回归自我;
};
视图 = 函数($el,控制器){
变量自我 = {};
self.render = 函数() {
$el.html("");
$el.delegate("#derp", "keyup", function(e) {
控制器.handler(e);
});
};
回归自我;
};
$el = jQuery("");
c = 新控制器();
v = 新视图($el, c);
模拟 = this.mock(c);
v.render();
mock.expects("handler").once();
$el.find("input").val("bar").trigger("keyup");
相等($el.find(“输入”).val(),“酒吧”);// 通过!
模拟.验证();
});
我在这里做错了吗?
谢谢,
艾琳