目前我正在尝试了解有关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;
}
我有两个问题:
提前致谢!
更新 我编写了以下测试来检查点击事件:
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();
});
});
答案 0 :(得分:8)
首先,关注Angular测试this guide,了解comp
,fixture
和el
变量是什么。
如何编写检查点击事件是否有效的测试?
你需要监视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);
});