2016-10-19 7 views
1

コンポーネントに含まれる別のサービスに依存するサービスを模擬するにはどうすればよいですか? 以下のコードを確認してください。角2 - 他のサービスに依存するコンポーネント内のモッキングサービス

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でサービスを模擬するにはどうすればよいですか?助けてください。ありがとうございました。

答えて

3

あなたはそれをモックできます。他のサービスは関係ありません。あなたが直面している問題はおそらく@Component.providersと思います。これを使用すると、TestBedで設定するすべてのモックは、@Component.providersが優先され、モックを使用する代わりにAngularが作成しようとするため使用されません。我々は@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 } 
     ] 
    } 
    }); 
}) 
のテンプレートとプロバイダのようなものを上書きすることができるようにそれを回避するために

、角度は、TestBed.overrideComponent方法を提供しています

関連する問題