在我正在处理的Backbone
应用程序中,即对它的测试,我有一个视图,它的事件哈希设置为在{{1发生change
事件时触发函数select
中的元素。
当我在为该功能创建的DOM
上收听呼叫时,永远不会调用它。
如何为spy
元素中的change
元素手动触发option
事件?
我有以下代码来创建事件:
select
答案 0 :(得分:1)
可能的一种解决方案:
var log = function( val ){ document.body.insertAdjacentHTML('beforeend' ,'<div>' + val + '</div>');
};
var sel = document.getElementsByTagName('select')[0];
sel.onchange = function(){
log('changed')
};
var event = new Event('change');
// Dispatch it.
sel.dispatchEvent(event);
<select>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
所以在你的用例中:
it('change on element "select" calls "clickedElement"', function () {
// Create a new 'change' event
//var event = document.createEvent("HTMLEvents");
//event.initEvent("change", true, true);
var event = new Event('change');
// Dispatch it.
//this._view.el.querySelector('option[selected]').dispatchEvent(event);
this._view.el.querySelector('select').dispatchEvent(event);
expect(this.clickedElementSpy).has.been.called;
});