我一起具有與茉莉測試問題淘汰賽模板結合:如何測試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)被動態加載 –