gpt4 book ai didi

javascript - 如何使用 Jasmine 测试 Knockout.js 点击绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 05:31:15 25 4
gpt4 key购买 nike

我在使用 jasmine 测试和 knockout 模板时遇到问题:

html 类似于:

<body>
<my-widget params="value: $data></my-widget>
</body>

小部件具有点击绑定(bind):

<div class="my-widget">
<a id="#clickme" data-bind="click: doSomething">Click me</a>
</div>

widget-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。

以下是我的 Jasmine 测试的摘录(已大大简化,但应包含要点):

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 元素时,我可以看到它存在。

小部件中的单击绑定(bind)似乎未正确应用。但是,当我在 bdd 中运行测试时,它已经结束并失败了 - 我可以手动单击此元素,并且 doSomething 确实会被调用。

我做错了什么?正如我所说,运行实际的应用程序效果很好。 Jasmine 似乎无法正确处理点击绑定(bind) - 我在 document.ready 中设置的常规点击事件没有这个问题

最佳答案

您确实不应该像这样测试按钮点击 - 如果您直接调用函数 doSomething() ,您可以更加确定。就像您自己不测试 JQuery 的任何内部结构一样。

如果您真的想在固定装置上测试事件,您是否尝试过

$("#clickme").trigger('click');

此外,在调试测试时(例如通过浏览器)仔细检查固定装置是否已插入 DOM

关于javascript - 如何使用 Jasmine 测试 Knockout.js 点击绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com