2017-10-10 14 views
1

私のAngularアプリケーションにいくつかのテストを書こうとしています。私はJasmin/Karma/PhantomJSでテストを書いていますが、私はすべてのテストが失敗するエラーが出ています。これはError: No provider for SessionUtil!です。カルマを使用した角膜検査のエラー:未知(約束):エラー:SessionUtilのプロバイダがありません

SessionUtilは多くのパブリックメソッドを持つユーティリティクラス/サービスです。私main.component.tsファイルに私はそう

constructor(@Inject(SessionUtil) private sessionUtil: SessionUtil) 

ように私のコンストラクタに注入し、これは(私はすべてを宣言し、私の​​サービスをインポートするだけではないことのすべて、など)私のテストファイル

です
describe('MainComponent',() => { 
    let componentFixture: ComponentFixture<MainComponent>; 
    let instance: any; 
    let element: any; 
    let sessionUtil: SessionUtil; 
    let spyLocalizationsService; 
    const firstLanguage = 'en-US'; 
    const secondLanguage = 'de-DE'; 
    const unknownLanguage = 'xx-XX'; 

    beforeEach(async(() => { 

    spyLocalizationsService = sinon.createStubInstance(LocalizationsService); 
    spyLocalizationsService.changeLanguage.withArgs(firstLanguage, sinon.match.any, sinon.match.any).callsArg(1); 
    spyLocalizationsService.changeLanguage.withArgs(secondLanguage, sinon.match.any, sinon.match.any).callsArg(1); 
    spyLocalizationsService.changeLanguage.withArgs(unknownLanguage, sinon.match.any, sinon.match.any).callsArg(2); 
    spyLocalizationsService.getSupportedLanguages.returns([firstLanguage, secondLanguage]); 

    (sinon.stub(spyLocalizationsService, 'currentLanguage') as any).get(() => firstLanguage); 

    // Allows overriding default providers, directives, pipes 
    TestBed.configureTestingModule({ 
     imports: [ 
     RouterTestingModule.withRoutes([ 
      // some Paths 
     ]), 
     TranslateI18NextTestingModule.forRoot(), 
     AuthTestingModule.forRoot(), 
     NoopAnimationsModule, 
     MaterialModule 
     ], 
     declarations: [ 
     MainComponent, 
     DummyComponent 
     ], 
     schemas: 
     [CUSTOM_ELEMENTS_SCHEMA], 
     providers: 
     [{provide: LocalizationsService, useValue: spyLocalizationsService}, 
     {provide: MATERIAL_COMPATIBILITY_MODE, useValue: true}] 
    }).compileComponents().then(() => { 
     componentFixture = TestBed.createComponent(MainComponent); 
     element = componentFixture.nativeElement; 
     instance = componentFixture.componentInstance; // BannerComponent test instance 
     sessionUtil = componentFixture.debugElement.injector.get(SessionUtil); 
    }); 
    })); 

    const isAuthenticated =() => Promise.resolve({ 
    isAuthenticated: true, 
    username: 'Max Musterman' 
    }); 

describe('on init',() => { 

beforeEach(async(() => { 
    sinon.stub(sessionUtil, 'isAuthenticated').returns(isAuthenticated()); 
})); 

テストを実行すると次のエラーが表示され、テストは実行されませんUncaught (in promise): Error: No provider for SessionUtil!私は明らかに間違っています。私はTestBed.configureTestingModuleオブジェクトprovidersアレイにSessionUtilを注入しようとしましたが、これは私に多くの問題を与えました。私はこれを間違って注射しているのを誰も見ることができますか?

アドバイスをいただければ幸いです!

答えて

0
{provide: SessionUtil, useValue: sessionUtil} 

そして、あなたはスタブ

でsessionUtilを開始する必要があります
関連する問題