Ich lerne, wie ich meine ersten Tests mit Angular 2, unter Verwendung angular-cli
.eckig cli: Selektoren unbekannt während der Tests
Wenn ich eine neue Komponente MyComponent
schaffen, dann app-mycomponent
in die App-Vorlage seiner Wähler hinzufügen, werden alle Tests fehlschlagen und sagen, dass app-mycomponent
unbekannt ist.
Dieses Problem tritt nur in Tests auf; Wenn ich die App starte, ist alles in Ordnung.
Meine Umgebung:
npm : 3.10.10
node : 6.9.5
angular-cli : 1.0.0-beta.32.3
jasmine-core: 2.5.2
protractor: 5.1.0
Anstatt Tonnen Konfigurationsdateien kopieren, hier Schritte zu reproduzieren:
ein neues Projekt erstellen
ng new testproj cd testproj
eine Komponente erstellen
ng generate component mycomp
-
./src/mycomp/mycomp.component.ts
gehen und seine Wähler beachten (sollteapp-mycomp
sein)bearbeiten
./src/app/component.html
und fügen Sie diese Zeile:<app-mycomp></app-mycomp>
wo
app-mycomp
ist der Selektor Sie in Schritt sah 3.Starten Sie die Tests:
ng test
dann hier die Fehler gemeldet:
Error: Template parse errors:
'app-mycomp' is not a known element:
1. If 'app-mycomp' is an Angular component, then verify that it is part of this module.
2. If 'app-mycomp' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. ("
{{title}}</h1>
[ERROR ->]<app-mycomp></app-mycomp>"): [email protected]:0
Ist es ein Fehler, oder habe ich etwas falsch gemacht? Ich habe versucht, MyComponent
als provider
in AppComponent
, dasselbe Problem manuell einzustellen.
Haben Sie hinzugefügt 'MyComponent' als' declaration', wenn die 'TestBed' für' src/app/App konfigurieren. component.spec.ts'? Das sollte Schritt 5 sein; Wenn Sie die Komponente zur Vorlage hinzufügen, müssen Sie auch sicherstellen, dass sie in den Tests verfügbar ist. – jonrsharpe
@jonrsharpe: das ist ein Teil, den ich finde, aber angular cli scheint das für mich zu tun, in meiner Spezifikationsdatei verwende esforEached zweimal, wo es tut: beforeEach (async (() => { TestBed.configureTestingModule ({ Deklarationen: [MyComponent] }) .compileComponents(); })); before (() => { fixture = TestBed.createComponent (MyComponent); component = fixture.componentInstance; fixture.detectChanges(); }); – Giova
Das sieht wie der Test für MyComponent aus, aber der Fehler sieht wie sein für den Test für AppComponent aus. Dies ist der Test, bei dem Sie die MyComponent zu den Deklarationen hinzufügen müssen. –