몇 주 전에 나는 JavaScript의 세계에 뛰어 들었다. Angular를 사용하고 Karma와 Jasmine으로 코드를 테스트합니다. 나는 문제가있는 각도 지시어를 가지고있다.키 이벤트 핸들러가있는 카르마 유닛 테스트 각도 지시문
나는 <input>
상자와 함께 사용하기위한 각도 지시어가 있습니다. 지시문은 입력 상자를 수정하여 입력을 숫자로만 허용합니다.
<div>
Numbers only: <input number-only ng-required="true"
ng-model="myNumber" type="text" maxlength="3"
placeholder="NNN">
</div>
내가 지시가 제대로 유선 도착하는지 테스트하고 싶습니다, 그리고 성공적으로 필터링 :
var testDirective = angular.module('testDirectiveApp', []);
testDirective.directive('numberOnly', function() {
return {
restrict: 'A',
link: function (scope, element) {
element.on('keydown', function (event) {
var k = event.keyCode;
if (48 <= k && k <= 57) {
return true;
}
event.preventDefault();
return false;
});
}
};
});
난과 같이 HTML에서 사용할 것 : 여기에 코드의 단순화 된 버전입니다 비 번호 입력. "a1b2c3"을 타이핑하면 입력 상자는 "123"이어야합니다.
입력 상자에 문자열을 입력 한 후 값 (입력 상자, 각도 모델 등)을 확인하는 방법은 여러 가지가 있지만 지금까지는 아무 것도 시도하지 않았습니다.
describe('numberOnly', function() {
'use strict';
var scope, element;
beforeEach(module('testDirectiveApp'));
beforeEach(inject(function($compile, $rootScope) {
scope = $rootScope.$new();
scope.testInput = "";
element = angular.element('<input number-only ng-model="testInput" type="text">');
$compile(element)(scope);
scope.$digest();
}));
it('should accept number input', function() {
triggerKeyDown(element, 49);
expect(scope.testInput).toBe("1");
});
var triggerKeyDown = function (element, keyCode) {
var e = $.Event("keydown");
e.which = keyCode;
e.keyCode = keyCode;
$(element).trigger(e);
};
});
나는 심지어 사용자 입력을 시뮬레이션하기 위해 E2E 테스트를 작성했습니다 :
다음 테스트는 내 많은 시련의 예입니다. 또한 HTML 요소에서 이벤트 처리기 함수를 추출하고 단위 함수를 테스트 해 보았습니다. 지금까지 아무도 일하지 않았다.
각도 지시어를 테스트하려면 어떻게해야합니까?
이 정보는 도움이 될 것입니다. $ digest 또는 angular ... 트리거가 누락 된 것 같습니다. http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ –
check 이 질문에 대해서도 마찬가지입니다. 여기에 사용자 trigglerHandle. http://stackoverflow.com/questions/21211036/jquery-trigger-event-in-angularjs-karma-test –
대체 솔루션을 찾는 데 도움이되는 또 다른 좋은 질문입니다. http://stackoverflow.com/a/15282932/532495 –