2016-04-08 8 views
1

Ich habe eine Direktive, die ich für Formularvalidierung testen soll, die als Attribut festgelegt ist.

restrict: 'A', 
    scope: true, 

Der Formularname aus dem Elemente attr

$scope.theFormName = elem.attr('name'); 

Wo ich innen zu bekommen, muß gegeben wird, ist die if-Anweisung

if ($scope.theForm.$valid) { 

Innerhalb meiner before für meine Komponententest Ich habe

html = angular.element("<div ha-form-validation name=\"name\" class=\"ng-invalid\"></div>"); 
    $rootScope = $rootScope.$new(); 
    element = $compile(html)($rootScope); 

    $rootScope.$digest(element); 

    scope = element.scope(); 

    scope.name = { 
     name: "test", 
    }; 

Ich habe versucht, das Formular als gültig in meinem Test

var form = scope.theFormName.$setValidity("properties", true); 

jedoch theFormName eingestellt ist

scope.theFormName.$valid = undefined 

Gibt es eine Möglichkeit, diese als gültig zu setzen undefined Zurückgeben?

Antwort

0

Es gibt ein paar Probleme hier:

  1. Das Element (html) Sie kompilieren keinen form Element es umschließt, die auf gültig gesetzt werden könnte.

  2. sollten Sie versuchen, Objekte, die die $scope Zugabe vor html wie folgt kompilieren:

    var scope = $rootScope.$new(); 
    scope.name = { 
        name: "test" 
    }; 
    element = $compile(html)(scope); 
    
    scope.$digest(); 
    
  3. Ich bin mir nicht sicher, was genau Ihre Richtlinie aussieht, aber wenn man die form zuzugreifen versuchen, die umschließt es, dann können Sie das tun, mit:

    require: '^form', 
    link: function(scope, element, attrs, formCtrl) 
    

    die Winkel FormController auf das übergeordnete Formular in link als 4t erhalten injiziert wird h Argument (formCtrl), anstatt den Namen des Formulars als Attribut für das Element übergeben zu müssen.

Auch, wenn Sie mit ha-form-validation eine Art von benutzerdefinierten Validierung zu tun versuchen, könnte this helfen.