2017-08-09 2 views
0

Au sein de cette directive, je veux tester les éléments suivants:

$scope.$on('loggedMsg', function(){ 
    if($scope.users.length){ 
     $scope.callingFn(); 
    } 
}); 

Je suis capable d'émettre loggedMsg et $scope.apply(), il appellera le scope.callingFn $(). Y at-il un moyen de ne pas réellement appeler $ scope.callingFn, mais juste espionner? J'utilise moka et sinon pour écrire ces tests unitaires. Ce que je suggère est-il possible?

describe('testing directive', function(){ 
    const elemScope = element.isolateScope; 
    it('should trigger callingFn if loggedMsg is emitted', function(){ 
     scope.$emit('loggedMsg'); 
     scope.$apply(); 
     //elemScope.callingFn will be called due to the apply. Is there a way to just spy on that fn being called? 
    } 
}); 

Répondre

0

Lorsque vous utilisez Sinon pour bouchonner une fonction, appelant cette fonction (maintenant écrasa) ne remet pas l'original.

Stubs prennent également en charge l'API complète Spy, ce qui signifie que nous pouvons utiliser un Stub pour vous assurer que la méthode originale ne soit pas appelé et voir aussi dans quelles conditions il a été appelé (par exemple combien de fois, avec quels paramètres).

Utilisation de votre test exemple:

describe('testing directive', function(){ 
    const scope = element.isolateScope; 
    it('should trigger callingFn if loggedMsg is emitted', function(){ 
     const stub = sinon.stub(scope, 'callingFn'); 
     scope.$emit('loggedMsg'); 
     scope.$apply(); 
     assert(stub.called); 
    }); 
}); 

Documentation Référence: http://sinonjs.org/releases/v4.1.2/stubs/