主干测试 - 在'select'元素上触发“更改”事件

时间:2015-11-04 16:20:31

标签: javascript unit-testing events backbone.js

在我正在处理的Backbone应用程序中,即对它的测试,我有一个视图,它的事件哈希设置为在{{1发生change事件时触发函数select中的元素。

当我在为该功能创建的DOM上收听呼叫时,永远不会调用它。

如何为spy元素中的change元素手动触发option事件?

我有以下代码来创建事件:

select

1 个答案:

答案 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;

});