2016-03-25 4 views
0

Im essayant d'écrire quelques tests unitaires pour un service comme:test unitaire angular2 de services imbriqués

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

où Service2 contient, à son tour, Service3:

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

i essai à partir dans un vraiment terrible façon, comme:

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); 
}); 

mais maintenant, j'utilise beforeEachProviders et ce que Happ en ce:

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); 
    })); 

est:

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

Peut-someboby me aider?

Merci à l'avance.

Répondre

0

Si vous voulez injecter la valeur de chaîne de l'injection de dépendance, vous devez utiliser le @Inject décorateur:

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

En fait, l'injection repose sur les types de paramètres par défaut si vous n'utilisez pas le décorateur @Inject.

+0

J'avais déjà utilisé le décorateur @Inject dans le constructeur, mais pas dans le service Mock !! vraiment merci – AntuJitsu