J'utilise le framework de test angular-cli.
à l'intérieur de mon composant, j'ai utilisé le module de nœud 'ng2-slim-loading-bar'.
submit(){
this._slimLoadingBarService.start(() => {
});
//method operations
}
Maintenant, quand je teste ce composant, j'ai appliqué spyOn ce service comme:
beforeEach(() => {
let slimLoadingBarService=new SlimLoadingBarService();
demoComponent = new DemoComponent(slimLoadingBarService);
TestBed.configureTestingModule({
declarations: [
DemoComponent
],
providers: [
{ provide: SlimLoadingBarService, useClass: SlimLoadingBarService}
],
imports: [
SharedModule
]
});
});
it('should pass data to servie', () => {
spyOn(slimLoadingBarService,'start').and.callThrough();
//testing code,if I remove the above service from my component, test runs fine
});
mais ça ne marche pas.
Il jette l'erreur ci-dessous:
spyOn n'a pas pu trouver d'objet sur lequel espionner pour démarrer ()
Déclarer slimLoadingBarService avec let, vous limitez sa portée à la portée de rappel beforeEach. Déclarez-le avec var, ou mieux, déclarez-le après le bon bloc describe () et définissez son contenu dans la fonction de rappel beforeEach:
describe("some describe statement" , function(){
let slimLoadingBarService = null;
beforeEach( () => {
slimLoadingBarService=new SlimLoadingBarService();
});
it('should pass data to service', () => {
spyOn(slimLoadingBarService,'start').and.callThrough();
//testing code,if I remove the above service from my component, test runs fine
});
});
c'est dû à la non déclaration d'avant
beforeEach(() => {
slimLoadingBarService = TestBed.get(SlimLoadingBarService);
});