Ich versuche Unit-Test meine Direktive, die Formulargültigkeit in Abhängigkeit von einer Controller-Variable setzen. Meine Richtlinie Code:Unit Testing Direktive mit Link mit Controller
angular.module('myModule',[])
.directive('myDirective', function() {
return {
restrict: 'A',
link: function(scope, element, attr, ctrl) {
scope.$watch("mailExist", function(){
if(scope.mailExist) {
ctrl.$setValidity('existingMailValidator', false);
} else {
ctrl.$setValidity('existingMailValidator', true);
}
});
}
};
});
Wenn Komponententest dieser Richtlinie versucht, ich versuche, die Controller-Abfrage mit diesem Code zu isolieren:
describe('directive module unit test implementation', function() {
var $scope,
ctrl,
form;
beforeEach(module('myModule'));
beforeEach(inject(function($compile, $rootScope) {
$scope = $rootScope;
var element =angular.element(
'<form name="testform">' +
'<input name="testinput" user-mail-check>' +
'</form>'
);
var ctrl = element.controller('userMailCheck');
$compile(element)($scope);
$scope.$digest();
form = $scope.testform;
}));
describe('userMailCheck directive test', function() {
it('should test initial state', function() {
expect(form.testinput.$valid).toBe(true);
});
});
});
Mit diesem Test erhalte ich immer noch: Kann die Eigenschaft '$ setValidity' von undefined nicht lesen das heißt, ich habe nicht wirklich einen Controller injizieren. Was ist falsch in meinem Test?