Bir kullanıcının, belirli geçersiz karakterleri basmasını kısıtlayan bir yönerge oluşturdum, bu durumda, yönergemi kullanan giriş öğesine keypress
olay bağlamasını kullanarak. Bu işlevselliği test etmeye çalışıyorum, ancak bunu nasıl başaracağımı anlamıyorum.Açısal yönergeler: Bazı tuşların bir tuşa basma olayında reddedildiğini test etmek mümkün mü?
Benim direktifi
angular
.module('gp.rutValidator')
.directive('gpRutValidator', directive);
directive.$inject = ['$filter'];
function directive($filter){
var ddo = {
restrict: 'A',
require: 'ngModel',
link: linkFn
};
return ddo;
function linkFn(scope, element, attrs, ngModel){
//valid characters are digits, dash and letter k
var regexValidKeys = (/[\d\.\-k]/i);
element.bind('keypress', function(e){
var key = e.key || String.fromCharCode(e.keyCode);
if (!regexValidKeys.test(key)) {
e.preventDefault();
return false;
}
});
}
}
Testim
describe('Angular Rut Validator Directive',validatorDirectiveSpec);
function validatorDirectiveSpec(){
////////////// GLOBALS ////////////////////////////////
var scope, element, evt;
////////////// BEFORE EACH ////////////////////////////////
beforeEach(module('gp.rutValidator'));
beforeEach(inject(eachSpec));
function eachSpec($rootScope, $compile){
element = angular.element('<input ng-model="rut" gp-rut-validator>');
scope = $rootScope.$new();
$compile(element)(scope);
scope.$digest();
}
////////////////// HELPERS ///////////////////////////////////
function pressKey(keyCode) {
try {
// Chrome, Safari, Firefox
evt = new KeyboardEvent('keypress');
delete evt.keyCode;
Object.defineProperty(evt, 'keyCode', {'value': keyCode});
}
catch (e) {
// PhantomJS
evt = document.createEvent('Events');
evt.initEvent('keypress', true, true);
evt.keyCode = keyCode;
}
element[0].dispatchEvent(evt);
}
////////////////// SPECS //////////////////////////////////
it('1. Should be reject no valid characters', spec1);
function spec1(){
var ngModelCtrl = element.controller('ngModel'),
invalidCharacterKeys = [
'a'.charCodeAt(0),
'z'.charCodeAt(0),
'b'.charCodeAt(0),
'#'.charCodeAt(0)
];
invalidCharacterKeys.forEach(function(keyCode){
pressKey(keyCode);
scope.$digest();
expect(scope.rut).toBe('');
});
}
}
Ama hatayı ben yanlış yapıyorum Expected undefined to be ''.
olsun? Codepen içinde
Örnek =>http://codepen.io/gpincheiraa/pen/ozWyvA
Kendimi denemedim, ama bazı hızlı kazma bir cevap bulmuş gibi görünüyor. http://stackoverflow.com/questions/23561259/sending-keydown-to-angular-directive-with-jquery-trigger – dwbartz
Teşekkürler, bu teknik harika görünüyor! –