2017-10-19 12 views
1

du composant je suis nouveau pour les tests unitaires et j'ai un composant dans mon projet dans son constructeur une méthode est appeléeEspionner sur une méthode qui est appelée à partir du constructeur

export class myComponent { 
constructor(){  
     this.someMethod(); 
    } 

public someMethod(){ 
//some code 
} 

Je veux tester si la méthode est appelée avec cette suite de tests:

it('should call for the someMethod',() => { 
    spyOn(component, 'someMethod') //also tried .and.callThrough(); 

    expect(component.someMethod).toHaveBeenCalled();; 
}); 

le problème est alors qu'avec mon débogage je peux vous assurer que la méthode est appelée, le test échouera toujours.

serait vraiment apprécier, si quelqu'un aide.

Répondre

1

Comme expliqué dans this answer, l'un des avantages de l'utilisation de méthodes de prototypage est qu'elles peuvent être espionnées ou mockées avant l'instanciation de classe. Considérant que ce code est tapuscrit qui a la classe du contrôleur exporté, il est:

it('should call for the someMethod',() => { 
    spyOn(ComponentClass.prototype, 'someMethod'); 
    // instantiate ComponentClass class 
    expect(component.someMethod).toHaveBeenCalled(); 
}); 

Il est généralement une mauvaise habitude de faire un constructeur contient la logique d'initialisation, en particulier parce que cela rend les classes plus difficiles à tester et à étendre. Puisque AngularJS offre déjà des crochets de contrôleur, il est souhaitable de déplacer toute la logique d'initialisation vers $onInit, à moins qu'il n'y ait des problèmes de synchronisation liés au cycle de vie.