2016-11-30 8 views
0

ich die Winkel-cli bin mit und haben versucht, in die habbit zu bekommen meine Dienste zu testen, aber ich kann den Dienst nicht in den Test scheinen hier zu injizieren meine Situation ist:Angular-cli - Test Service

Angular2 Dienst

@Injectable() 
export class AppService{ 
} 

Karma Test - V1.3.0

Ist dies die richtige Syntax? Es scheint, dass es sich während der ersten Veröffentlichung von angular2 geändert hat.

describe('Tests',() => { 
    beforeEach(() => [ 
    {provide: AppService, useClass: AppService} 
    ]); 

    it('should create an instance', inject([AppService], (service: AppService) => { 
    expect(service).toBeTruthy(); 
    })); 
}); 

Ist dies die richtige Syntax? Es scheint, dass es sich während der ersten Veröffentlichung von angular2 geändert hat.

Testfehler

Tests should create an instance FAILED 
    Error: No provider for AppService! 

Meine Konfiguration

angular-cli: 1.0.0-beta.21 
node: 6.5.0 
os: win32 x64 

Antwort

2

Wenn Sie es injizieren wollen, können Sie immer noch die TestBed verwenden müssen, um die Winkeltestumgebung

import { TestBed } from '@angular/core/testing'; 

beforeEach(() => TestBed.configureTestingModule({ 
    providers: [ {provide: AppService, useClass: AppService} ] 
})); 
zu konfigurieren

* Hinweis: ** Wenn der Dienst keine anderen Abhängigkeiten hat, möchten Sie vielleicht nur die Angular-Konfiguration vergessen und einen isolierten Test durchführen, indem Sie den Dienst selbst instanziieren.

let service = new AppService(); 

Siehe auch:

+0

Danke für die Hilfe, habe es funktioniert! Schön, ich habe vergessen, wie detailliert die angular2 Dokumentation jetzt ist. Es scheint nur mit 'useValue:' zu funktionieren, aber irgendwelche Ideen, warum das funktioniert? –

+1

Huh? Meinst du wenn du 'new AppService()' machst? Wenn ja, was ich mit diesem Teil meine, ist, dass Sie einfach die gesamte TestBed-Konfiguration vergessen und nur eine neue Instanz für die Tests erstellen. Sonst funktioniert der erste Code wie er ist, obwohl er auch auf Provider vereinfacht werden könnte: [AppService] ' –

+0

Und yes' useValue' ist, wenn Sie Ihre eigene erstellte Instanz verwenden wollen. 'useClass' ist nur, wenn Sie möchten, dass Angular es erstellt –