如何模拟依赖于组件中其他服务的服务? 请检查以下代码。
a.component.ts
@Component({
selector: 'my-comp',
templateUrl: './my.component.html',
providers: [ MyServiceA ]
})
export class MyComponent {
我服务-a.service.ts
@Injectable()
export class MyServiceA{
constructor(private myServiceB: MyServiceB) {}
我服务-b.service.ts
export class MyServiceB{
constructor(private myServiceC: MyServiceC,
private myServiceD: MyServiceD) {}
如何在TestBed配置中的 a.component.spec.ts 中模拟服务?请帮忙。谢谢。
答案 0 :(得分:4)
你可以随意嘲笑它。其他服务无所谓。我想你可能面临的问题是@Component.providers
。使用此功能,您在TestBed
中配置的任何模拟都不会被用作@Component.providers
优先级,导致Angular尝试创建它,而不是使用模拟。
为了解决这个问题,Angular提供了TestBed.overrideComponent
方法,以便我们可以覆盖@Component
beforeEach(() => {
let myMockService = new MyMockService();
TestBed.configureTestingModule({
providers: [
// the following will not be used
{ provide: MyService, useValue: myMockService }
]
});
TestBed.overrideComponent(MyComponent, {
set: {
providers: [
// this will override the @Component.providers:[MyService]
{ provide: MyService, useValue: myMockService }
]
}
});
})