Ce qui est un bon moyen de l'unité de test isolé portée en AngularJS
JSFiddle montrant l'unité de test
Extrait de la Directive
scope: {name: '=myGreet'},
link: function (scope, element, attrs) {
//show the initial state
greet(element, scope[attrs.myGreet]);
//listen for changes in the model
scope.$watch(attrs.myGreet, function (name) {
greet(element, name);
});
}
Je veux m'assurer que la directive est à l'écoute de modifications - ce qui ne veut pas travailler avec un cas isolé portée:
it('should watch for changes in the model', function () {
var elm;
//arrange
spyOn(scope, '$watch');
//act
elm = compile(validHTML)(scope);
//assert
expect(scope.$watch.callCount).toBe(1);
expect(scope.$watch).toHaveBeenCalledWith('name', jasmine.any(Function));
});
Mise à JOUR: Je l'ai eu à travailler en vérifiant si la durée d'observateurs ont été ajoutés à l'enfant, mais il est très fragile et probablement en utilisant les accesseurs sans papiers moyen (aka sujets à changement sans préavis!).
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
Mise à JOUR 2:
Comme je l'ai mentionné c'est fragile! L'idée fonctionne toujours, mais dans des versions plus récentes de AngularJS l'accesseur a changé à partir de scope()
de isolateScope()
:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');