You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为JavaScript Web自定义组件的addEventListener编写单元测试用例

解决方案

1. 修复原组件的事件绑定顺序问题

你当前的userCard.js存在逻辑错误:绑定click事件时,this.clickFunction还未完成定义,传入监听的是undefined,事件触发后不会执行回调,需要调整代码顺序:

// 先定义回调函数
this.clickFunction = () => {
    console.log("inside of clickFunctions")
};
// 再绑定事件监听
this.reasonElem.addEventListener('click', this.clickFunction, false);

2. 编写点击事件测试用例

你已经引入了jsdom依赖,不需要额外mock元素的addEventListener方法,直接模拟目标元素的点击事件即可,在你的测试文件中新增以下用例:

test('点击reason元素触发clickFunction回调', () => {
    // 监听clickFunction调用情况
    jest.spyOn(sut, 'clickFunction');
    // 模拟触发click事件
    sut.reasonElem.dispatchEvent(new Event('click'));
    // 断言回调已被调用
    expect(sut.clickFunction).toHaveBeenCalled();
});

如果需要验证回调的输出逻辑,可以新增对console.log的监听用例:

test('clickFunction输出正确的日志内容', () => {
    const consoleSpy = jest.spyOn(console, 'log').mockImplementation();
    sut.reasonElem.dispatchEvent(new Event('click'));
    expect(consoleSpy).toHaveBeenCalledWith('inside of clickFunctions');
    consoleSpy.mockRestore();
});

额外覆盖率提升建议

你还可以补充以下测试场景进一步提升覆盖率:

  • 验证组件初始化时h3标签内容和传入的name属性一致
  • 验证组件初始化时img标签的src和传入的avatar属性一致
  • 验证setupEvents调用时正确绑定了全局keypress监听

内容的提问来源于stack exchange,提问作者Sajid Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:04