Угловой 7, покрытие кода Жасмин не включает функцию, в то время как тест возвращает положительный - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть функция, закрывающая sidenav на клик фона:

 public closeSidenav() {
    this.sidenav.toggle();
 }

И в HTML:

<mat-sidenav-container (backdropClick)="closeSidenav()">

Я тестирую событие 'BackgroundClick' в следующем тесте:

it('should listen to a backdrop click and toggle the sidenav menu', () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;

    app.ngOnInit();
    fixture.detectChanges();

    spyOn(app, 'closeSidenav');

    const backdrop = fixture.debugElement.query(By.css('div.mat-drawer-backdrop'));
    backdrop.triggerEventHandler('click', null);

    expect(app.closeSidenav).toHaveBeenCalled();
});

Тест возвращает положительный результат, но функция не покрывается покрытием кода. Я попытался добавить

    spyOn(app.sidenav, 'toggle');
    expect(app.sidenav.toggle).toHaveBeenCalled();

без других результатов.

Это последняя функция в файле, и из-за этого я не получаю 100% покрытия.

Просто хочу знать, чего мне не хватает.

1 Ответ

0 голосов
/ 06 ноября 2018

При использовании triggerEventHandler необходимо указать привязку к событию, а не действие - backgroundClick not click :

<mat-sidenav-container (backdropClick)="closeSidenav()">

const container = fixture.debugElement.query(By.css('mat-sidenav-container'));
container.triggerEventHandler('backdropClick', null);

И чтобы добиться реального покрытия кода, попросите шпиона вызвать реальный код:

spyOn(app, 'closeSidenav').and.callThrough();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...