web-dev-qa-db-fra.com

spyOn n'a pas pu trouver d'objet sur lequel espionner pour démarrer ()

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 ()

10
Bhushan Gadekar

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

c'est dû à la non déclaration d'avant

beforeEach(() => {
    slimLoadingBarService = TestBed.get(SlimLoadingBarService);
});
2
nirmal