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

如何在Angular中获取Event Emitter发射的值?

获取Angular EventEmitter发射的值(单元测试场景)

我明白你遇到的问题了——在单元测试里想验证EventEmitter发射的值和传入的一致,但直接打印发射器对象只能看到它的内部属性,拿不到实际发射的值。咱们一步步来解决这个问题:

先回顾下你的场景:
你在测试里调用组件方法时传入的参数:

var eventValue = <ManagedColumns>{ selectedColumns : ["Select","Last Name"], availableColumns: ["First Name"] }; 
component.updateColumns(eventValue);

组件里的方法实现:

updateColumns(eventValue: ManagedColumns) { 
  console.log("KKKKKKK"+JSON.stringify(eventValue)); 
  this.applyColumnChanges.emit(eventValue); 
  console.log("LLLLLL"+JSON.stringify(this.applyColumnChanges)); 
}

直接打印component.applyColumnChanges得到的是发射器对象而非发射值,这很正常——因为EventEmitter本质是RxJS的Observable,它是用来触发事件的工具,不是存储值的容器,所以直接打印它只会显示自身的状态属性。

下面给你两种实用的方法来获取并验证发射的值:

方法一:手动订阅捕获值

这种方式适合你需要拿到发射值做更多后续验证的场景:

  1. 先声明变量存储捕获到的事件值:
let emittedValue: ManagedColumns;
  1. 在调用目标方法前,订阅组件的applyColumnChanges发射器:
component.applyColumnChanges.subscribe(value => {
  emittedValue = value;
});
  1. 调用updateColumns方法触发事件:
const eventValue = <ManagedColumns>{ selectedColumns : ["Select","Last Name"], availableColumns: ["First Name"] }; 
component.updateColumns(eventValue);
  1. 最后做断言验证:
expect(emittedValue).toEqual(eventValue);

方法二:用Spy监听emit方法(更简洁)

如果你用的是Jasmine测试框架,直接给emit方法创建间谍函数,就能轻松验证它的调用情况和传入参数:

const eventValue = <ManagedColumns>{ selectedColumns : ["Select","Last Name"], availableColumns: ["First Name"] }; 
// 给emit方法创建间谍
spyOn(component.applyColumnChanges, 'emit');

// 调用目标方法
component.updateColumns(eventValue);

// 验证emit是否被调用,且参数和传入值一致
expect(component.applyColumnChanges.emit).toHaveBeenCalledWith(eventValue);

这种方式不需要手动订阅,直接通过间谍函数就能完成验证,是单元测试里常用的方式。

内容的提问来源于stack exchange,提问作者a p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:02