You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karma覆盖率未统计被spy监听的openSidenav函数如何解决?

问题原因

你使用spyOn方法时,默认会直接替换目标函数的原有实现,只会记录函数的调用状态,不会执行原函数内部的代码。你的测试只验证了openSidenav被调用,但函数内this.showSidenav = true的逻辑全程没有执行,因此Karma的覆盖率工具会判定该函数未被覆盖。

解决方法

修改spy的配置,追加.and.callThrough(),让spy在监听调用状态的同时,保留执行原函数的逻辑:

it('should open sidenav when user click in hamburg icon', () => {
   // 追加and.callThrough()保证原函数执行
   const spyOnOpenSidenav = spyOn(component, 'openSidenav').and.callThrough();
   const header = fixture.debugElement.query(By.css('#header'));
   header.triggerEventHandler('openSidenavEmitter', {});
   fixture.detectChanges();
   expect(spyOnOpenSidenav).toHaveBeenCalled();
   // 额外加断言验证逻辑正确性,测试更严谨
   expect(component.showSidenav).toBeTrue();
});

修改后重新运行测试,openSidenav内部的代码会正常执行,覆盖率就会被正确统计。

内容的提问来源于stack exchange,提问作者veroneseComS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:36:03