2017-03-28 3 views
12

Ich bin neu in Angular 2 testen. Ich versuche herauszufinden, was ist der Unterschied in der Verwendung testsbed.get() und nur mit inject auf der Teststufe.Was ist der Unterschied zwischen testbed.get und inject in Angular 2/Jasmine Tests?

zB:

beforeEach(() => { 
    TestBed.configureTestingModule({ 
     providers: [SomeService] 
    }); 

    const testbed = getTestBed(); 
    someService= testbed.get(SomeService); 
    }); 
}); 

vs

it('test service', inject([SomeService], (someService: SomeService) => { 
+0

Ich habe Jasmine Tags und Titel für Sie hinzugefügt. Es ist die Schlüsseltechnologie, auf die sich diese Frage bezieht. – JGFMK

+0

Ich habe keine vollständige Antwort, aber Graben den Code: 'inject' ruft' testbed.get' intern auf. Der Hauptunterschied besteht darin, dass, wenn Sie 'AsyncTestCompleter' zum 'injizieren' bereitstellen, 'compileComponents' ausgeführt wird und das bereitgestellte Objekt eine' done' Funktion hat, die die Ausführung eines asynchronen Tests abschließt. Sieht so aus, als wäre dies alter Code und es wird bevorzugt, 'async (inject (' '' '') stattdessen zu verwenden. Dann sieht von diesem Punkt aus wie eine Syntaxpräferenzsache. – BrunoLM

+0

v4 https://github.com/angular/angular/blob/4.3.x /packages/core/testing/src/test_bed.ts#L493 /v2 https://github.com/angular/angular/blob/2.0.x/modules/%40angular/core/testing/test_bed.ts#L404 – BrunoLM

Antwort

10

inject Helferfunktion wurde historisch seit AngularJS als Alternative zur direkten Injektor Anrufe verwendet. In Angular 1 war es notwendig, einen Test mit ngMock zu starten. Es ist in Angular 2 und höher völlig optional und nur eine empfohlene Methode für DI in TestBed-Tests.

It a convenience wrapper for testBed.get, die mehr testBed.get Anrufe zu vermeiden erlaubt, ähnlich:

const [foo, bar] = [Foo, Bar].map(TestBed.get); 

Andere Helferfunktionen optional verwendet mit inject in Verbindung sein können, nämlich async und fakeAsync.

Verwandte Themen