基本上,如果您使用 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(),“酒吧”);// 通过! 模拟.验证(); });
我在这里做错了吗?
谢谢,
艾琳