Cette validation personnalisée directive est un exemple présenté à la officiel angulaire site. http://docs.angularjs.org/guide/forms Il vérifie la saisie de texte est en format de nombre ou pas.
var INTEGER_REGEXP = /^\-?\d*$/;
app.directive('integer', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
ctrl.$parsers.unshift(function(viewValue) {
if (INTEGER_REGEXP.test(viewValue)) {
// it is valid
ctrl.$setValidity('integer', true);
return viewValue;
} else {
// it is invalid, return undefined (no model update)
ctrl.$setValidity('integer', false);
return undefined;
}
});
}
};
});
À l'unité de tester ce code, j'ai écrit ceci:
describe('directives', function() {
beforeEach(module('exampleDirective'));
describe('integer', function() {
it('should validate an integer', function() {
inject(function($compile, $rootScope) {
var element = angular.element(
'<form name="form">' +
'<input ng-model="someNum" name="someNum" integer>' +
'</form>'
);
$compile(element)($rootScope);
$rootScope.$digest();
element.find('input').val(5);
expect($rootScope.someNum).toEqual(5);
});
});
});
});
Ensuite, j'obtiens cette erreur:
Expected undefined to equal 5.
Error: Expected undefined to equal 5.
J'ai mis des instructions d'impression partout pour voir ce qui se passe, et il semble que la directive n'est jamais appelée. Ce qui est un bon moyen de tester une directive simple comme ça?