Backbone.js 事件键代码13模拟不工作
我正在为主干视图编写测试,通过创建Backbone.js 事件键代码13模拟不工作,backbone.js,mocha.js,keypress,sinon,Backbone.js,Mocha.js,Keypress,Sinon,我正在为主干视图编写测试,通过创建$.event(“keypress”,“which:13})并将其传递到测试套件中的trigger方法来模拟按键事件。然而,当我查看我的测试结果时,我发现在我的createOneNet函数中,它在第一个条件下返回,测试失败,并显示以下消息AssertionError:expected addCommentToCollection至少被调用过一次,但从未被调用过,这意味着它不会将按键事件识别为13 为什么会这样? 我的设置不正确吗 这是我尝试测试的主干功能: cr
$.event(“keypress”,“which:13})
并将其传递到测试套件中的trigger
方法来模拟按键事件。然而,当我查看我的测试结果时,我发现在我的createOneNet
函数中,它在第一个条件下返回,测试失败,并显示以下消息AssertionError:expected addCommentToCollection至少被调用过一次,但从未被调用过
,这意味着它不会将按键事件识别为13
为什么会这样?
我的设置不正确吗
这是我尝试测试的主干功能:
createOnEnter: function(event) {
if (event.keyCode != 13) return;
if (!this._input.val()) return;
this.addCommentToCollection();
this.resetInputField();
this.concealButtons();
}
这是在侦听输入字段上的按键事件的主干eventhash中触发的
此问题的必要测试设置(还有许多其他存根和间谍):
描述(“AppView”,函数(){
前(函数(){
//创建测试夹具
此.$fixture=$(“”+
'' +
'' +
'' +
'' +
'' +
'' +
“
”+
'');
});
beforeach(函数(){
//为每次运行绑定夹具
此.$fixture.appendTo($(“#fixture”);
//实例化我们的模型
this.model1=新注释({
“评论”:“我喜欢饼干”,
“已创建”:“2012年12月12日”,
“修改”:“13-01-2013”,
“用户”:{
“用户名”:“奈特先生”
}
});
this.model2=新注释({
“评论”:“我剽窃一切!”,
“已创建”:“14-09-2012”,
“修改”:“21-01-2013”,
“用户”:{
“用户名”:“卡萨诺瓦先生”
}
});
//将模型放置在数组中以用于集合实例化
this.models=[this.model1,this.model2];
//用上面的模型实例化我们的集合
this.collection=新的CommentList(this.models,
{url:“items/1234567890/comments”}
);
this.addCommentSpy=sinon.spy(AppView.prototype,“addCommentToCollection”);
this.createEnterSpy=sinon.spy(AppView.prototype,“createOnner”);
this.resetSpy=sinon.spy(AppView.prototype,“resetInputField”);
this.hiddenspy=sinon.spy(AppView.prototype,“隐藏按钮”);
//实例化我们的新视图
this.view=新建AppView({
“收藏”:这个收藏,
“el”:这是$fixture
});
});
在每个(函数()之后){
this.addCommentSpy.restore();
这是resetSpy.restore();
this.hiddenspy.restore();
这是.createEnterSpy.restore();
//撤消我们的服务器
这个.server.restore();
//破坏我们的观点
this.view.remove();
});
在(函数()之后{
//清空我们的固定装置分区
$(“#fixtures”).empty();
});
它(“当按键-‘Enter’-输入字段中有值时,应触发CreateOneNoter”,函数(){
this.view.$(“#新评论”).val(“堂兄本森,它坏了!”);
this.view.$(“#new comment”).trigger($.Event(“keypress”{which:13}));
expect(this.createEnterSpy).to.have.been.called;
expect(this.addCommentSpy).to.have.been.call;
期望(this.resetSpy).to.have.been.call;
期待(这个间谍)被呼叫;
});
});
基于
事件属性
jQuery规范化以下属性以实现跨浏览器一致性:
目标
相关目标
pageX
pageY
哪个
metaKey
因此,请使用事件。哪个或
var code = event.keyCode || event.which;
if (code == 13) { //Enter keycode
//Do something
}
像这样
var code = event.keyCode || event.which;
if (code == 13) { //Enter keycode
//Do something
}