javascript - 测试 Jasmine 中是否触发了事件

标签 javascript unit-testing testing jasmine jquery-events

在没有 jquery-jasmine 的情况下,如何测试 Jasmine 中是否触发了事件?

我正在做一个不使用 jQuery 的项目 (wohoo),我正在尝试为我的菜单触发功能编写一个单元测试。它是这样工作的:

  • 你点击一个按钮
  • 我的可测试组件然后运行 ​​document.dispatchEvent(new CustomEvent('menu.toggle'))
  • 我想测试组件是否确实发送了自定义事件。

我该如何测试?

最佳答案

尝试了一下,找到了一个行之有效的解决方案:

import triggerEvent from 'trigger-event';
import component from './components/site-menu';

describe('triggering menu button', () => {
  let menuToggleSpy;
  beforeEach(() => {
    menuToggleSpy = jasmine.createSpy('event');
    component();
  });

  it('dispatches menu.toggle event', () => {
    document.addEventListener('menu.toggle', menuToggleSpy);

    const $trigger = document.querySelector('.js-trigger-main-menu');
    triggerEvent($trigger, 'click');

    expect(menuToggleSpy).toHaveBeenCalled();
  });
});

基本上创建一个名为“事件”的新 spy ,将其添加为我的事件的事件处理程序,然后验证它是否已被调用。

如果有更好的方法来做到这一点,我会非常乐意接受不同的答案。

关于javascript - 测试 Jasmine 中是否触发了事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938016/

相关文章:

javascript - 如何在 JavaScript 对象构造函数中设置可配置、可写和可枚举属性

unit-testing - 如何处理非回归测试?

angular - 没有 InjectionToken 自定义 HTTP 配置的提供程序

java - Mockito 比 EasyMock 更受欢迎?

internet-explorer - 最新的 Internet Explorer 应用程序兼容性 VPC 镜像在哪里?

ruby-on-rails - rspec 国际化测试 View ?

javascript - 如何在表单标签内添加点击事件

javascript - 代码 "length === +length"在 JavaScript 中是什么意思?

ios - Quamotion - 搜索包含一个字符串但不包含另一个字符串的元素

Javascript 挑战——最后一个苹果是哪个篮子?