【发布时间】:2026-01-11 14:40:01
【问题描述】:
我正在尝试测试按钮单击事件。 Angular 官方手册说有两种方法可以做到这一点。
1.
it('should raise selected event when clicked (triggerEventHandler)', () => {
let selectedHero: Hero;
const heroDe = fixture.debugElement.query(By.css('dashboard-hero'));
comp.selected.subscribe((hero: Hero) => selectedHero = hero);
heroDe.triggerEventHandler('click', null);
expect(selectedHero).toBe(expectedHero);
});
it('should raise selected event when clicked (element.click)', () => {
let selectedHero: Hero;
const heroEl: HTMLElement = fixture.nativeElement.querySelector('.hero');
comp.selected.subscribe((hero: Hero) => selectedHero = hero);
heroEl.click();
expect(selectedHero).toBe(expectedHero);
});
第一种方法对我来说效果很好。但是当我尝试第二个选项时,测试运行没有错误,但 Karma 开始在无限循环中运行测试。
这是我对这两种方式的实现。
it('test1', () => {
fixture.detectChanges();
let treeNodeElement = fixture.debugElement.query(By.css('#buttonSend'));
treeNodeElement.triggerEventHandler('click', null);
expect(component.tabService.tabs.length).toBe(1);
expect(component.tabService.tabs[0].title).toBe('Test1');
});
it('test2', () => {
fixture.detectChanges();
const treeNodeElement: HTMLElement = fixture.nativeElement.querySelector('#buttonSend');
treeNodeElement.click();
expect(component.tabService.tabs.length).toBe(1);
expect(component.tabService.tabs[0].title).toBe('Test1');
});
你能告诉我第二个选项的错误在哪里吗?
【问题讨论】:
-
有什么解决办法吗?我也有同样的问题。
标签: angular unit-testing karma-jasmine