Chỉ thị xác thực tùy chỉnh này là một ví dụ được trình bày tại trang web góc chính thức. http://docs.angularjs.org/guide/forms Nó kiểm tra đầu vào văn bản có ở định dạng số hay không.
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;
}
});
}
};
});
Để kiểm tra đơn vị mã này, tôi đã viết như sau:
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);
});
});
});
});
Sau đó, tôi nhận được lỗi này:
Expected undefined to equal 5.
Error: Expected undefined to equal 5.
Tôi đặt các câu lệnh in ở khắp mọi nơi để xem điều gì đang xảy ra, và có vẻ như chỉ thị không bao giờ được gọi. Cách thích hợp để kiểm tra một chỉ thị đơn giản như thế này là gì?