2017-09-14 1 views
0

Je ne comprends pas pourquoi ce code ne fonctionne pas?

erreur est:

Expected spy addEventListener to have been called with [ 'scroll', <jasmine.any(Function)>, true ] but it was never called. 

.

describe('sessionActivity.spec',() => { 
    beforeEach(module('sessionActivity')); 

    it('should subscribe', inject(($window, sessionActivity) => { 
     spyOn($window, 'addEventListener'); 

     sessionActivity.subscribe(); 
     //$window.addEventListener('scroll',() => {}, true); 
     //$window.addEventListener('click',() => {}, true); 
     expect($window.addEventListener).toHaveBeenCalledWith('scroll', jasmine.any(Function), true); 
     expect($window.addEventListener).toHaveBeenCalledWith('click', jasmine.any(Function), true); 
    })); 
}); 

À l'intérieur d'un sessionActivity.subscribe Je crée deux écouteurs d'événements.

Et aussi si je décommente deux lignes avec //$window.addEventListener tout le test est passé.

Qu'est-ce que je devrais changer ici?

ÉDITÉE:

Le problème est que j'ai utilisé raccourci à l'intérieur sessionActivity.subscribe():

const { addEventListener, removeEventListener } = $window; 
addEventListener('scroll', trackActivityWithDebounce, true); 
addEventListener('click', trackActivityWithDebounce, true); 

quelqu'un peut-il expliquer cela?

+0

S'il vous plaît, fournir tous les codes pertinents. Où est exactement appelé 'addEventListener'? Voir http://stackoverflow.com/help/mcve – estus

Répondre

0

Le jasmin toHaveBeenCalledWith est supposé vérifier que la fonction spyy est appelée. Par conséquent, le message d'erreur indique: Vous attendez que la méthode soit appelée mais qu'elle ne soit pas appelée.

Je pense que vous avez commenté le code ou pendant le test que cette fonction n'est pas appelée.

expect($window.addEventListener).toHaveBeenCalledWith('scroll', jasmine.any(Function), true); 

Je pense que la ligne ci-dessus crée le problème. Vous devez vérifier que le défilement fonctionne.

0

Essayez de changer

spyOn($window, 'addEventListener') 

à

spyOn($window, 'addEventListener').and.callThrough();