Javascript 单元测试的触发事件

Javascript 单元测试的触发事件,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,我试图使用浏览器中运行的Mocha在单元测试中触发一个滚动事件。我有以下代码: describe('Background Change', function() { describe('toogleBgHandler()', function() { it('should contain toggle-bg when scrollTop is more than 0', function() { let html = document.createElement('html');

我试图使用浏览器中运行的Mocha在单元测试中触发一个滚动事件。我有以下代码:

describe('Background Change', function() {
  describe('toogleBgHandler()', function() {
  it('should contain toggle-bg when scrollTop is more than 0', function() {
    let html = document.createElement('html');
    var target = [];
    target.push(html);
    let body = document.createElement('body');
    let div = document.createElement('div');
    html.appendChild(body);
    body.appendChild(div);
    document.body.dispatchEvent(new Event("scroll"));
    toggleBgHandler(target, div)
    chai.assert.isTrue(div.classList.contains("toggle-bg"));
  });
  });
});
我正在尝试测试的功能:

function toggleBgHandler(html, ele) {
        document.addEventListener("scroll", (e) => {
        if (html[0].scrollTop === 0) {
            ele.classList.remove("toggle-bg");
        } else {
            ele.classList.add("toggle-bg");
        }
      });
    }

如何为依赖它的函数触发滚动事件?我也尝试过创建一个事件对象,但也没有成功。任何指针都很好。

代码在窗口或_元素上查找的滚动事件是什么?如果它在窗口上,您应该能够发送如下滚动事件:

window.dispatchEvent(new Event('scroll'));
否则,您可以执行以下操作:

element.dispatchEvent(new Event('scroll'));

演示。

此测试是在浏览器中运行,还是使用类似于
jsdom
的东西?@Jacob此测试是在浏览器中运行的。更新以澄清。创建事件将是正确的做法,因此很高兴看到您尝试了什么,以便我们能够找出它不起作用的原因。
滚动
事件不会冒泡。我刚刚对代码进行了更新,以反映该更改,但出于某种原因,它仍然不起作用。在您的更新中,您正在添加事件侦听器之前调度事件。您需要调用
toggleBgHandler
,然后分派事件,然后断言。我也尝试过,但似乎没有拾取滚动事件,因为侦听器中的代码从未被调用。