Questa direttiva di convalida personalizzata è un esempio presentato al sito angolare ufficiale. http://docs.angularjs.org/guide/forms Controlla che un input di testo sia in formato numerico o meno.Per testare una direttiva angularjs di convalida personalizzata
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;
}
});
}
};
});
Per unità di prova di questo codice, ho scritto questo:
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);
});
});
});
});
Allora ottengo questo errore:
Expected undefined to equal 5.
Error: Expected undefined to equal 5.
ho messo istruzioni di stampa in tutto il mondo per vedere cosa sta succedendo, e sembra che la direttiva non venga mai chiamata. Qual è un modo corretto per testare una direttiva semplice come questa?
Grazie per aver trovato il tempo di riportare una risposta! Solo FYI, puoi estrarre la tua risposta e contrassegnarla come quella accettata per gli utenti successivi, che è accettabile da queste parti ;-) –
Grazie per i tuoi suggerimenti. Ho spostato la mia risposta. – ghiden