我有一个功能,可以在单击背景幕时关闭sidenav:
execute(f)
在HTML中:
public closeSidenav() {
this.sidenav.toggle();
}
我正在以下测试中测试'backdropClick'事件:
<mat-sidenav-container (backdropClick)="closeSidenav()">
该测试返回正值,但该功能未包含在代码范围内。我尝试添加
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();
});
没有其他结果。
这是文件中的最后一个函数,因此我没有得到100%的覆盖率。
只想知道我可能会缺少什么。
答案 0 :(得分:1)
使用triggerEventHandler
时,您需要指定事件绑定而不是动作- backdropClick 而不是 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();