我一起具有与茉莉测试问题淘汰赛模板结合:如何测试Knockout.js点击茉莉
的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.logging的#clickme元素我可以看到它是存在的。
看来小部件中的点击绑定没有得到正确应用。但是,当我在bdd中运行测试并且结束并失败时 - 我可以手动单击此元素并确定调用了某些东西。
我在做什么错?正如我所说的,运行实际的应用程序是完美的。这似乎是茉莉花不能正确处理点击绑定 - 我没有这个问题与文档中设置的常规点击事件。已准备好
我试图重现你的问题,但不能.. https://jsfiddle.net/9qb1936v/我错过了什么? – user3297291
当整个事情在jasmine规范中运行时,出现问题,其中包含我的挖空小部件的固定装置(即HTML)被动态加载 –