2017-10-05 2 views
0

Si une directive prend une fonction de l'oscilloscope et que cette fonction est asynchrone, comment puis-je tester cette fonction? Par exempleTester une fonction asynchrone ne faisant pas partie d'un service

angular.module('myApp').factory('AsyncService',() => { 
    return { 
     async: // function that returns a promise 
    } 
}) 

angular.module('myApp').directive('asyncDirective',() => ({ 
    scope: { async: = }, 
    link: scope => { 
     scope.async.then(//do something) 
    } 
})); 

angular.module('myApp').controller('ctrl', ($scope, AsyncService) => { 
    $scope.asyncService = AysncService; 
}); 

<async-directive async="asyncService.async" /> 

Le code ci-dessus est un exemple de la façon dont la directive peut être utilisée, mais je veux seulement tester la directive seule. Puisque la directive attend une fonction et non un objet qu'elle peut utiliser pour appeler une fonction, comment pourrais-je la tester? Si j'utilisais un espion, qu'est-ce que j'espionnerais?

Répondre

1

Le service devrait être écrasa:

beforeEach(() => { 
    module('myApp', { AsyncService: { async: jasmine.createSpy() } }); 
}) 

Ensuite, la méthode peut être moqué de retourner une promesse avant la compilation de directive:

AsyncService.async.and.returnValue($q.resolve(...));