Поскольку событие номер один является угловым материальным событием, я, вероятно, предположил бы, что срабатывание мат-меню при щелчке работает и не будет включать это конкретное событие в тестовый набор.
Я бы предпочел использовать NO_ERRORS_SCHEMA в настройках теста и запускать только события нажатия ваших собственных кнопок:
Спецификации будут выглядеть примерно так:
@Directive({
selector: 'mat-menu',
exportAs: 'matMenu'
})
class DirectiveStub {
}
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [AppComponent, DirectiveStub],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
});
it('should be created', () => {
fixture.detectChanges();
expect(component).toBeTruthy();
});
it('click on second button', fakeAsync(() => {
component.customers = [
{licenseownerid: 'ID_1', licenseownername: 'NAME_1'},
{licenseownerid: 'ID_2', licenseownername: 'NAME_2'}
]
fixture.detectChanges();
const buttonDebugElems: DebugElement[] = fixture.debugElement.queryAll(By.css('button'));
expect(buttonDebugElems.length).toEqual(3);
buttonDebugElems[2].triggerEventHandler('click', null);
tick();
expect(component.customerName).toEqual('NAME_2');
expect(component.customerNumber).toEqual('ID_2');
}));
});
Важно отметить
К сожалению, необходимо заглушить директивный угловой материал, используемый для его меню. Это пустая (не экспортируемая) директива вверху спецификации. Если у вас есть больше компонентов с этим меню, которое вы хотели бы протестировать, возможно, было бы целесообразно перенести эту директиву в один файл, помещенный в отдельную папку, например 'test', чтобы вы могли повторно использовать эту директиву в своих тестах, но они не включены в ваше приложение.
Вот рабочий пример: stackblitz