如何使用Jasmine测试Knockout.js点击绑定
How to test the Knockout.js click binding with Jasmine
我在茉莉花测试和敲除模板方面遇到了问题
html类似于此:
<body>
<my-widget params="value: $data></my-widget>
</body>
小部件有一个点击绑定:
<div class="my-widget">
<a id="#clickme" data-bind="click: doSomething">Click me</a>
</div>
小部件javascript如下所示:
ko.components.register('my-widget', {
viewModel : function(params) {
this.doSomething = function() {
// doing something
};
},
template: {
require: 'text!../../templates/my-widget.html'
}
});
所有这些在生产中都能很好地工作,但在Jasmine/Jquery中,触发点击$("#clickme")不会执行doSomething。
以下是我的茉莉花测试摘录(它被大大简化了,但应该包含要点):
beforeEach(function (done) {
require(['specHelpers', 'knockout'],
function (specHelpers, knockout) {
specHelpers.loadFixtureIntoPage("page.html", "myPage"); // template and id to use
expect($('#myPage')).toExist();
done();
});
});
it("WILL NOT TRIGGER MY CLICK", function (done) {
ko.applyBindings(myPage.pageViewModel, $('#myPage'))[0]);
setTimeout(function() {
$('#clickme').click();
// doSomething is not called :(
done();
}, 300);
});
当console.log记录#clickme元素时,我可以看到它存在。
小部件中的点击绑定似乎没有得到正确应用。然而,当我在bdd中运行测试时,它已经结束并失败了——我可以手动单击这个元素,doSomething确实会被调用。
我做错了什么?正如我所说,运行实际的应用程序是完美的。jasmine似乎无法正确处理点击绑定-我对文档中设置的常规点击事件没有这个问题。ready
你真的不应该像那样测试按钮点击——如果你直接调用函数doSomething(),你可以更确定。与您自己不测试JQuery的任何内部一样。
如果你真的想在固定设备上测试事件,你试过吗
$("#clickme").trigger('click');
此外,在调试测试时(比如通过浏览器),请仔细检查fixture是否已插入到中的DOM中。
相关文章:
- react.js中的密钥绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 淘汰赛.JS'启用'长度绑定条件不起作用
- Backbone.js将模型绑定到视图时出错
- 使用knockout.js将数组绑定到视图模型
- 如何使用Jasmine测试Knockout.js点击绑定
- 在offline.js中绑定事件
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- 基本D3.js:如何将具有其他属性的数据绑定到元素
- 是否可以为React'打开React.js自动绑定;s类模型
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- knockout.js中的绑定多下拉列表
- 一种将Apache Thrift JS绑定与Backbone.JS一起使用的方法
- 为SEO的数据绑定JS预加载数据
- C3 中的双向数据绑定.js AngularJS 中的双向数据绑定
- 用于绑定 JS 对象以进行回调的解决方案
- 如何解绑定JS bundle文件
- 根据鼠标位置绑定js事件:性能杀手与否