在不降低模板覆盖率的前提下进行测试
我正在使用带独立组件的Angular 21,以及Vitest(通过 @angular/build:unit-test)。
我有一个父级独立组件,它导入了一个子组件:
@Component({
selector: 'app-child',
standalone: true,
template: `child`,
})
export class ChildComponent {}
@Component({
selector: 'app-parent',
standalone: true,
imports: [ChildComponent],
template: `
<div>
<app-child></app-child>
</div>
`,
})
export class ParentComponent {}
在我的测试中,我不想实例化真实的 ChildComponent,因此使用 overrideComponent 将其移除:
await TestBed.configureTestingModule({
imports: [ParentComponent],
})
.overrideComponent(ParentComponent, {
remove: { imports: [ChildComponent] },
})
.compileComponents();
从功能上讲,这样做是可行的。
然而,当我这么做时,Vitest/V8报告中的 ParentComponent 的HTML模板覆盖率就消失了。看起来覆盖组件定义会阻碍对原始模板的正确打桩。
例如:
如果我不使用 overrideComponent,覆盖率就能正常工作。
在使用带独立组件的 overrideComponent 时,这是预期的行为吗?
有没有推荐的方式来:
- 在测试中移除或模拟子组件;
- 不重新定义父组件;以及
- 不破坏模板覆盖报告?
还是说 overrideComponent 与像Vitest/V8这样的模板覆盖工具根本不兼容?
解决方案
这是一个已知问题,因为Vitest使用AOT编译。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
