2017-01-05 3 views
3
@Injectable() 
export class Service1 { 
    constructor(private s2 : Service2) { 
     console.log(s2.name); 
    } 
} 

@Injectable() 
export class Service2 { 
    public name: string = 'Hi'; 
} 


//------------Test------------- 

let service1: MockService1; // MockService1 extends Service1 
let service2: MockService2; // MockService2 extends Service2 

beforeEach(() => { 
    TestBed.configureTestingModule({ 
     providers: [ 
      { provide: Service1, useClass: MockService1 }, 
      { provide: Service2, useClass: MockService2 } 
     ] 
    }) 
}); 

beforeEach(inject([ Service1 , Service2 ], (s1: MokcService1 , s2: MockService2 ) => { 
    service1 = s1; 
    service2 = s2; 
})); 

it('should be defined ',() => { 
    expect(service1).toBeDefined(); 
    expect(service2).toBeDefined(); 
}); 

Ich erhalteAngular 2 RC5, Unit-Tests Problem mit Dienstleistungen

Typeerror: undefined ist kein Objekt (Bewertung 's2.name')

weil Service2 nicht definiert ist.

Der gleiche Code arbeitete früher mit addProviders und bieten

beforeEach(() => { 
    addProviders([ 
     provide(Service1, {useClass: MockService1 }), 
     provide(Service2, {useClass: MockService2 }), 
    ]); 
});   

Diese zwei Tests vorbei sind, wenn console.log (s2.name) entfernt wird

Jede Idee?

Antwort

0

Verwenden @Inject wenn der Dienst in den Konstruktor Injektion

Beispiel:

constructor(@Inject(Service2) private s2 : Service2) { 
    console.log(s2.name); 
} 
+0

Der Code sollte '@Inject verwenden (...)' nicht '$ Inject (...)' und es gibt wahrscheinlich ein Problem woanders, wenn Sie '@Inject (xxx)' brauchen, wobei 'xxx' mit dem Typ des Parameters übereinstimmt. –

+0

ah ja, @Inject, das war ein Tippfehler –

Verwandte Themen