私の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
を注入しようとしましたが、これは私に多くの問題を与えました。私はこれを間違って注射しているのを誰も見ることができますか?
アドバイスをいただければ幸いです!