Gon*_*bia 6 javascript testing jasmine angularjs angular-directive
我一直在构建一个指令,限制用户按下某些无效字符,在这种情况下,使用keypress事件绑定到使用我的指令的输入元素.我一直在尝试测试这个功能,但我不明白如何实现这一点.
我的指示
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;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的考试
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('');
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误 Expected undefined to be ''.
我究竟做错了什么?
Codepen中的示例=> http://codepen.io/gpincheiraa/pen/ozWyvA
使用此代码 it('1. Should be reject not valid characters')代替 it('1. Should be reject no valid characters', spec1);
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |