Angular 为什么在角度2测试中需要覆盖组件?
在测试时,我对覆盖组件的使用感到困惑。Angular 为什么在角度2测试中需要覆盖组件?,angular,unit-testing,karma-jasmine,Angular,Unit Testing,Karma Jasmine,在测试时,我对覆盖组件的使用感到困惑。 在下面的代码中,我模拟了一个名为HomeModel的服务 带有覆盖组件 TestBed .configureTestingModule({ imports: [CoreModule], declarations: [HomeComponent], providers: [ {provide: Router, useValue: router} ],
在下面的代码中,我模拟了一个名为
HomeModel
的服务
带有覆盖组件
TestBed
.configureTestingModule({
imports: [CoreModule],
declarations: [HomeComponent],
providers: [
{provide: Router, useValue: router}
],
schemas: [NO_ERRORS_SCHEMA]
})
.overrideComponent(HomeComponent, {
set: {
providers: [
{provide: HomeModel, useClass: MockHomeModel}
],
}
})
.compileComponents();
}));
TestBed
.configureTestingModule({
imports: [CoreModule],
declarations: [HomeComponent],
providers: [
{provide: Router, useValue: router},
{provide: HomeModel, useClass: MockHomeModel}
],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
不带覆盖组件
TestBed
.configureTestingModule({
imports: [CoreModule],
declarations: [HomeComponent],
providers: [
{provide: Router, useValue: router}
],
schemas: [NO_ERRORS_SCHEMA]
})
.overrideComponent(HomeComponent, {
set: {
providers: [
{provide: HomeModel, useClass: MockHomeModel}
],
}
})
.compileComponents();
}));
TestBed
.configureTestingModule({
imports: [CoreModule],
declarations: [HomeComponent],
providers: [
{provide: Router, useValue: router},
{provide: HomeModel, useClass: MockHomeModel}
],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
我们不能在providers
中指定useClass
,而不是覆盖组件吗?在我的例子中,它只有在我重写时才起作用。后者不起作用
overrideComponent
在测试中的主要用途是什么?不起作用
实际上适用于一切。到底什么不起作用?@smnbbrv在我的例子中,每个测试用例都失败了。返回null或undefined。useClass
肯定足以模拟类,因此这不应该是问题的原因。是否存在某些编译错误,组件是否缺少其他提供程序?是否没有其他编译错误。