2016-03-25 16 views
0

Im Versuch, einige Unit-Test für einen Dienst wie zu schreiben:angular2 Unit-Test von verschachtelten Dienste

export class Service1 { 
... 
    public constructor(service2: Service2, service3: Service3) {} 
... 
} 

wo Service2 enthält, die wiederum Service3:

export class Service2 { 
... 
    public constructor(service3: Service3, stringa: string) {} 
... 
} 

i Test starten in ein wirklich schrecklich Art und Weise, wie:

it("check XXX",() => { 
    let service3: Service3= new Service3(); 
    let service2: service2= new service2(service3, "stringa"); 
    let service1: Service1 = new Service1(service2, service3); 
    expect(X).toEqual(X); 
}); 

aber jetzt, ich bin mit beforeEachProviders und welcher happ en mit diesem:

beforeEachProviders(() => { 
    return [ 
     provide(Service2, { useclass: MockService2}), 
     provide(Service3, { useclass: MockService3}), 
     provide('stringa', { useValue: "stringa"}), 
     Service1 
    ]; 
    }); 

    it('check XXX ', inject(
    [Service2, Service3], (service2: Service2, service3: Service3) => { 
    expect(true).toEqual(true); 
    })); 

ist:

Failed: No provider for String! (Service2-> String). 

someboby mir helfen könnte?

Vielen Dank im Voraus.

Antwort

0

Wenn Sie den String-Wert von Dependency Injection injizieren wollen, können Sie die @Inject Dekorateur verwenden müssen:

export class Service2 { 
    ... 
    public constructor(service3: Service3, @Inject('stringa') stringa: string) {} 
    ... 
} 

als eine Angelegenheit der Tatsache beruht Injektion auf Parametertypen standardmäßig, wenn Sie nicht verwenden der Dekorateur @Inject.

+0

Ich hatte bereits @Inject Dekorator im Konstruktor verwendet, aber nicht im Mock-Service !! wirklich danke dir !!! – AntuJitsu