2017-01-26 6 views
2

Ich arbeite daran, eine meiner Komponenten zum ersten Mal mit Karma/Jasmine usw. zu testen und habe meistens zusammen mit der docs on testing gefolgt. Meine Komponente benötigt 3 Konstruktorargumente.Angular2 Komponententest - Fehler: Kann nicht alle Parameter auflösen

constructor(
    private myService: MyService, 
    private renderer: Renderer, 
    private element: ElementRef 
) { } 

I mock versucht haben/Stich jene auf this section of the docs basierend Abhängigkeiten wie folgt;

// Mocks/Stubs 
const myServiceStub = {}; 
class MockElementRef {} 
class MockRenderer {} 

// beforeEach block 
beforeEach(() => { 
    TestBed.configureTestingModule({ 
    declarations: [ MyComponent ], 
    providers: [ 
     { provide: ElementRef, useClass: MockElementRef }, 
    { provide: Renderer, useClass: MockRenderer }, 
     { provide: MyService, useValue: myServiceStub}, 
    ] 
    }); 

    fixture = TestBed.createComponent(MyComponent); 
}); 

Trotzdem, wenn ich meine Tests ausführen, bekomme ich den folgenden Fehler;

Error: Can't resolve all parameters for MyComponent: (?, ?, ?). 
    at SyntaxError.ZoneAwareError (test.ts:9250:33) 
    at SyntaxError.BaseError [as constructor] (test.ts:44243:16) 
    at new SyntaxError (test.ts:44453:16) 
    at CompileMetadataResolver._getDependenciesMetadata (test.ts:61503:31) 

Was fehlt mir hier? Vielen Dank!

+0

Sie müssen 'TestBed.compileComponents', die asynchron ist. Siehe Abschnitt zum Testen von Komponenten mit Vorlagen. – jonrsharpe

+0

Es ist nicht das @ jonrsharpe, die Vorlage ist inline nicht in einer separaten Datei –

Antwort

4

Es kann durch Kreis DI verursacht werden, versuchen Sie Ihre Komponente MyComponent Refactoring-Dienst wie diese zu injizieren:

constructor(@Inject(forwardRef(() => MyComponentService)) private myService: MyComponentService) {} 
+0

Dies scheint das Problem zu lösen. Was würde den kreisförmigen DI jedoch verursachen? Der Dienst ist nur ein Basisdienst ohne injizierte Abhängigkeiten, der einige abstrahierte Geschäftslogikmethoden enthält. –

+0

Im Allgemeinen erscheint zirkuläre Abhängigkeit, wenn Sie zwei Dienste haben, die voneinander abhängen. Ich hatte eine App, in der ich den Verweis auf die Komponente im Dienst behielt und dieses Problem hatte. – PaTT

+0

oder es war keine Referenz, aber ich war dynamisch erstellen eine Komponente im Dienst - nicht genau erinnern;) – PaTT

Verwandte Themen