我有一个使用EventEmitter的组件,当单击页面上的某人时使用EventEmitter.有没有办法在单元测试期间观察EventEmitter,并使用TestComponentBuilder单击触发EventEmitter.next()方法的元素并查看发送了什么内容?

推荐答案

您的测试可能是:

it('should emit on click', () => {
   const fixture = TestBed.createComponent(MyComponent);
   // spy on event emitter
   const component = fixture.componentInstance; 
   spyOn(component.myEventEmitter, 'emit');

   // trigger the click
   const nativeElement = fixture.nativeElement;
   const button = nativeElement.querySelector('button');
   button.dispatchEvent(new Event('click'));

   fixture.detectChanges();

   expect(component.myEventEmitter.emit).toHaveBeenCalledWith('hello');
});

当您的组件为:

@Component({ ... })
class MyComponent {
  @Output myEventEmitter = new EventEmitter<string>();

  buttonClick() {
    this.myEventEmitter.emit('hello');
  }
}

Angular相关问答推荐

Angular中绑定嵌入标签src属性的问题

从Observatory的订阅方法外正确接收JSON数据

未触发HTTP拦截器

倒计时计时器,每10秒重新启动一次,共4次

弯管记忆

如果Rxjs间隔请求仍在进行,则不应重置,但如果用户更改输入,则应重置

阶段JS画布覆盖 bootstrap 模式

如何让 ag-Grid 事件读取私有方法?

如何处理后端删除元素后元素列表的刷新

ngRouterOutlet和组件生命周期使用自定义模板渲染的问题

如何从2个api获取数据并查看Angular material 表中的数据?

当访问令牌在 MSAL for Angular 中过期时如何重定向用户?

as和let之间的异步管道区别

如何在对话框angular material内对齐按钮?

ngx-toastr,Toast 未在 Angular 7 中显示

Angular 2 Material Design 组件是否支持布局指令?

默认情况下如何在Angular中 Select mat-button-toggle

Angular将 Select 值转换为 int

Angular 2 可用的 yeoman 生成器

Angular 4 错误:没有 HttpClient 的provider提供者