Я пишу юнит-тест для моего проекта Angular 6.
Однако я столкнулся с проблемой. Я хочу проверить кнопку с вызванной функцией щелчка, но тестовый файл всегда показывает эту ошибку.
Ниже указан мой код:
HTML:
<div>
<button (click)="onButtonClick(1)"><button>
<button (click)="onButtonClick(2)"><button>
<button (click)="onButtonClick(3)"><button>
</div>
comp.ts:
onButtonClick(key: number) {
do something
}
spec.ts
import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing';
import { PanelButtonsComponent } from './panel-buttons.component';
import { By } from "@angular/platform-browser";
describe('PanelButtonsComponent', () => {
let component: PanelButtonsComponent;
let fixture: ComponentFixture<PanelButtonsComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [PanelButtonsComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PanelButtonsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it("should call onButtonClick ", fakeAsync(() => {
const onClickMock = spyOn(component, 'onButtonClick');
fixture.debugElement.query(By.css('button')).triggerEventHandler('click', null);
expect(onClickMock).toHaveBeenCalled();
}));
});
Результат теста:
Ожидается, что шпион на кнопке Click будет вызван.
Любое предложение, чтобы исправить это? Спасибо
Обновление
Я отправил еще одну статью и следую по коду:
it('should', async(() => {
spyOn(component, 'onButtonClick');
let button =
fixture.debugElement.nativeElement.querySelector('button');
button.click();
fixture.whenStable().then(() => {
expect(component.onButtonClick).toHaveBeenCalled();
})
}));
Контрольный пример тоже не может пройти.
ОБНОВЛЕНИЕ 2:
В моем html будет вызываться два вида функции щелчка, поэтому это вызовет ошибку
<div>
<button (click)="onButtonClick(1)"><button>
<button (click)="onButtonClick(2)"><button>
<button (click)="onButtonClick(3)"><button>
<button (click)="onResetClick()"><button>
</div>