角度测试点击事件

时间:2017-08-07 09:56:25

标签: angular typescript

目前我正在尝试了解有关Angular(v2 +)测试的更多信息,但我仍坚持在* ngFor循环中测试点击事件。

这是HTML代码:

<div *ngIf="selectedHero">...</div>
<ul class="heroes">
  <li *ngFor="let hero of heroes" (click)="onSelect(hero)" [class.selected]="hero === selectedHero">
    <span class="badge">{{hero.id}}</span> {{hero.name}}
  </li>
</ul>

这是onSelect事件:

onSelect(hero:Hero):void{
    this.selectedHero = hero;
}

我有两个问题:

  1. 如何编写检查点击事件是否有效的测试?
  2. 如何在设置变量selectedHero时编写使div元素可见的测试?
  3. 提前致谢!

    更新 我编写了以下测试来检查点击事件:

    it('should trigger a click event', () => {
      fixture.detectChanges();
      fixture.whenStable().then(() => {
        let comp = fixture.componentInstance;
        spyOn(comp, 'onSelect');
    
        let el = fixture.debugElement.query(By.css('li')).nativeElement.click();
        expect(comp.onSelect).toHaveBeenCalled();
      });
    });
    

1 个答案:

答案 0 :(得分:8)

首先,关注Angular测试this guide,了解compfixtureel变量是什么。

  

如何编写检查点击事件是否有效的测试?

你需要监视onSelect方法并确保它被触发:

it('should test click', () => {
    spyOn(comp, 'onSelect');
    el = fixture.debugElement.query(By.css('li')).nativeElement.click();
    expect(comp.onSelect).toHaveBeenCalled();
});
  

如何编写一个使div元素可见的测试   变量selectedHero已设置?

您需要测试该类是否已应用于元素:

it('should test selected', () => {
    el = fixture.debugElement.query(By.css('li')).nativeElement;
    expect(el.classList.has('selected')).toBe(false);

    comp.onSelect(heroes[0]);
    expect(el.classList.has('selected')).toBe(true);
});