2017-01-05 8 views
1

Meine App hat viele Module mit vielen Komponenten und Diensten und anderen Angular2-Zeug.eckig 2 testen - Kann keine Komponente erstellen

Jetzt versuche ich TestBed Ansatz verwenden, um eine Einheit Tests mit Jasmin + Karma zu erstellen.

Ich habe einen Fehler beim Aufdecken des Proof of Concept. Ich habe einen Test für eine meiner Komponenten geschaffen, die wie folgt aussieht:

let myCompServiceStub = {} as MyComponentService; 
let routerStub = {} as Router; 
let globalServiceStub = {} as MyGlobalService; 

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

    beforeEach(async(() => { 
     TestBed 
      .configureTestingModule({ 
       imports: [MyModule], 
       providers: [ 
        { provide: MyComponentService, useValue: myCompServiceStub }, 
        { provide: Router, useValue: routerStub }, 
        { provide: MyGlobalService, useValue: globalServiceStub } 
       ] 
      }) 
      .compileComponents() 
      .then(() => { 
       fixture = TestBed.createComponent(MyComponent); 
       // component = fixture.componentInstance; 
      }); 
    })); 


    it('test it',() => { 
     expect(true).toBe(true); 
    }); 
}); 

MyModule eine Reihe von Einfuhren von anderen Modulen hat (die meisten von ihnen mir, aber es gibt auch CommonModule, MaterializeModule, FormsModule Module bilden Winkel- und Materialise), die einige globale Komponenten definieren. Es hat auch eine MyComponentService in Anbietern. Die importierten benutzerdefinierten Module haben keine bereitgestellten Dienste.

MyGlobalService in AppComponent zur Verfügung gestellt, die Hauptkomponente ist.

Wenn ich versuche, um die Tests zu laufen, bekomme ich einen Fehler:

PhantomJS 2.1.1 (Windows 8 0.0.0) MyComponent test it FAILED 
     [email protected]:8833:41 
     [email protected]:10715:50 
     [email protected]:8832:53 
     [email protected]:8709:58 
     [email protected]:8976:43 
     [email protected]:4098:31 
     karma-shim.js:4111:33 
     [email protected]:4466:13 
     [email protected]:9045:79 
     karma-shim.js:9081:32 

Und ich bin wirklich auf es stecken, haben keine gute Ideen , was ich falsch mache?

Abhängigkeiten Meine Tests sieht aus wie:

"@angular/common": "~2.3.0", 
"@angular/compiler": "~2.3.0", 
"@angular/compiler-cli": "^2.3.1", 
"@angular/core": "~2.3.0", 
"@angular/forms": "~2.3.0", 
"@angular/http": "~2.3.0", 
"@angular/platform-browser": "~2.3.0", 
"@angular/platform-browser-dynamic": "~2.3.0", 
"@angular/platform-server": "^2.3.1", 
"@angular/router": "~3.3.0", 
"angular2-materialize": "6.3.0", 
"karma": "1.1.2", 
"karma-chrome-launcher": "^1.0.1", 
"karma-coverage": "^1.0.0", 
"karma-jasmine": "^1.0.2", 
"karma-phantomjs-launcher": "^1.0.0", 
"karma-remap-istanbul": "0.1.1", 
"karma-sourcemap-loader": "^0.3.7", 
"karma-webpack": "1.7.0", 
"@types/jasmine": "^2.5.36", 
"jasmine-core": "^2.3.4", 
"jasmine-spec-reporter": "^2.4.0", 

Antwort

0
let fixture: ComponentFixture<MyComponent>; 

und

fixture = TestBed.createComponent(ListPRDComponent); 

MyComponent = ListPRDComponent

Versuch:

fixture = TestBed.createComponent(MyComponent); 
+0

Hoppla, das war ein Tippfehler in Frage, nur um einige geheime Daten zu verstecken :) –

1

Stellen Sie sicher, Sie tatsächlich Ihre Komponente importieren (kann nicht sehen, ob Sie oder nicht tat) über

import { MyComponent } from './MyComponent.component'; 
import { FormsModule } from '@angular/forms'; 

Auch in Sie TestBed.configureTestingModule Ihre Komponente als Erklärung gesetzt

TestBed.configureTestingModule({ 
     declarations: [ MyComponent ], 
     imports:[FormsModule ], 
     providers:[] 
    }) 
    .compileComponents() 
    })); 

P. S. Ich importiere FormsModule auch auf allen meinen Testkomponenten.

+0

Ich hatte gerade ein ähnliches Problem, importierte das FormsModule und HttpClientTestingModule reparierte es für mich – remib

Verwandte Themen