我想这就是我问题的答案。
一开始,点击按钮后会调用不同种类的函数。
<div>
<button (click)="onButtonClick(1)"><button>
<button (click)="onButtonClick(2)"><button>
<button (click)="onButtonClick(3)"><button>
<button (click)="onResetClick()"><button>
因此,测试将导致错误。
it("should call onButtonClick ", fakeAsync(() => {
const onClickMock = spyOn(component, 'onButtonClick');
fixture.debugElement.query(By.css('button')).triggerEventHandler('click', null);
expect(onClickMock).toHaveBeenCalled();
}));
预期间谍按钮点击已被调用。
因此,通过测试的正确方法应如下所示:
将类名添加到HTML
<div>
<button (click)="onButtonClick(1)" class="normalBtn"><button>
<button (click)="onButtonClick(2)" class="normalBtn"><button>
<button (click)="onButtonClick(3)" class="normalBtn"><button>
<button (click)="onResetClick()" class="restBtn"><button>
</div>
it('should call onButtonClick', fakeAsync(() => {
fixture.detectChanges();
spyOn(component, 'onButtonClick');
let btn = fixture.debugElement.queryAll(By.css('.normalBtn'));
for (let i = 0; i < btn.length; i++) {
btn[i].triggerEventHandler('click', null);
}
tick(); // simulates the passage of time until all pending asynchronous activities finish
fixture.detectChanges();
expect(component.onButtonClick).toHaveBeenCalled();
}));
it("should call onResetClick ", fakeAsync(() => {
fixture.detectChanges();
spyOn(component, 'onResetClick');
let btn = fixture.debugElement.query(By.css('.resetBtn'));
btn.triggerEventHandler('click', null);
tick(); // simulates the passage of time until all pending asynchronous activities finish
fixture.detectChanges();
expect(component.onResetClick).toHaveBeenCalled();
}));