Diese benutzerdefinierte Validierungsrichtlinie ist ein Beispiel, das auf der offiziellen Winkel-Site vorgestellt wird. http://docs.angularjs.org/guide/forms Überprüft, ob eine Texteingabe im Zahlenformat vorliegt oder nicht.
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;
}
});
}
};
});
Um diesen Code zu testen, habe ich Folgendes geschrieben:
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);
});
});
});
});
Dann bekomme ich diesen Fehler:
Expected undefined to equal 5.
Error: Expected undefined to equal 5.
Ich habe überall Print-Anweisungen platziert, um zu sehen, was los ist, und es sieht so aus, als würde die Direktive niemals aufgerufen. Was ist ein geeigneter Weg, um eine einfache Anweisung wie diese zu testen?