У меня возникла небольшая проблема, когда выяснилось, как тестировать базовую угловую директиву с использованием жасмина.Устранение неисправностей Угловая директива
По существу все директивы она будет проверить, что два входа пароля равны и устанавливает
директива выглядит следующим образом:
angular.module('jhApp')
.directive('jhEquals', function() {
return {
restrict: 'A',
require: '?ngModel',
link: linker
};
function linker(scope, elem, attrs, ngModel) {
if(!ngModel) {
return false;
}
//watch own value and re-validate
scope.$watch(attrs.ngModel, function() {
validate();
});
//observe other value and re-validate on change
attrs.$observe('jhEquals', function() {
validate();
});
var validate = function() {
var val1 = ngModel.$viewValue;
var val2 = attrs.jhEquals;
//set validity
if(val1 && val2) {
ngModel.$setValidity('jhEquals', !val1 || !val2 || val1 === val2);
}
};
}
});
и спецификации выглядит следующим образом:
var scope,
dirElement;
beforeEach(function() {
module('jhApp');
module('templates');
inject(function($rootScope, $compile) {
scope = $rootScope;
scope.user = {};
dirElement = angular.element('<input id="password" type="password" name="password" ng-model="user.password" jh-equals="{{user.passwordconfirm}}"><input id="newpasswordconfirm" type="password" name="newpasswordconfirm" ng-model="user.passwordconfirm" jh-equals="{{user.password}}>');
$compile(dirElement)(scope);
});
scope.$digest();
});
it('should check if values are equal', function() {
var passwordInput = dirElement.find('#password');
var confirmPasswordInput = dirElement.find('#newpasswordconfirm');
angular.element(passwordInput).val('testpassword').trigger('input');
angular.element(confirmPasswordInput).val('nottestpassword').trigger('input');
scope.$digest();
//expect this to be invalid
});
passwordInput & confirmPasswordInput - показывает пустые объекты, когда я консолью, и если я проверю значения val1 и val2 в val idate() в директиве всегда не определено.
Итак, я думаю, проблема в том, что я не могу понять, как выбрать входные данные для добавления контента.