2017-08-22 4 views
0

に、私はこの記事https://stackoverflow.com/a/42462579/1818048角度2インスタンス化グローバルインジェクタカルマジャスミンテスト

と同じセットを持っているが、私は私のカラマジャスミンは、テストでServiceLoctor.inject.getを使用することができません - インジェクタがnull

app.moudleモジュールでは、グローバルに使用できるように次のように宣言しました。ここで

export class AppModule { 
    constructor(private injector: Injector) { 
    ServiceLocator.injector = this.injector; 
    } 
} 

は、今私はテストServiceLocator.injectorがnullの実行時に私のテスト・セットアップ

describe('MyButtonComponent',() => { 
    let component: MyButtonComponent; 
    let fixture: ComponentFixture<MyButtonComponent>; 

    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     declarations: [ButtonComponent, MyButtonComponent], 
     providers: [SomeService, 
     { provide: Router, useClass: RouterTestingModule }, 
     { provide: ServerService, useClass: GenericMock }, 
     ] 
    }) 
     .overrideComponent(ResourceService, { 
     set: { 
      providers: [ 
      { provide: ConfigService, useClass: ConfigServiceMock } 
      ] 
     } 
     }) 
     .compileComponents(); 
    })); 

    beforeEach(() => { 
    fixture = TestBed.createComponent(MyButtonComponent); 
    component = fixture.componentInstance; 
    fixture.detectChanges(); 
    }); 

    it('should create',() => { 
    expect(component).toBeTruthy(); 
    }); 

}); 

からの抜粋です。カルマジャスミンを親にセットするにはどうしたらいいですか?これは不可能ですか?

答えて

0

このグローバルインジェクタは、アプリケーションユニットを他のアプリケーションユニット(AppModule)に依存させ、カプセル化を中断させるため、疑問の余地があります。

基本的には、手動でユニットテストで実行する必要があります。

beforeEach(inject(injector: Injector) => { 
    ServiceLocator.injector = injector; 
})); 

し、その後、元に戻す:

afterEach(() => { 
    ServiceLocator.injector = null; 
}); 

より良い動きが別のモジュールにグローバルインジェクタを移動することですので、それを含めることができますテストベッドの構成で。

+0

私はこれを機能させるのに苦労しています。私は '、'と予想され、名前 'injector'を見つけることができず、 '{ServiceLocator:any; } 'は' number '型のパラメータに代入不可能です。 – Dezza

0

@estusあなたのバージョンは、私のために以下のコードが私のために働いたものとは異なるバージョンでなければなりません。しかし、あなたは正しい道に感謝してくれました。

beforeEach(inject([Injector], (injector: Injector) => { 
    ServiceLocator.injector = injector; 
    }));