2016-03-25 5 views
0

Ich habe eine Richtlinie, die ich spotten und testen möchte. Die Richtlinie hat ngModel gesetzt Bindung zu verdoppeln und wahrMocking und Testrichtlinie mit isolieren Bereich mit ng-Modell

scope: {'ngModel': '=' } 

transclude: true 

Die Spezifikation, die ich zu testen bin, ist ziemlich einfach transcluden.

$el.find('input').prop('checked', $scope.ngModel); 

Innerhalb von meiner Unit-Tests habe ich eine before und schuf die Richtlinie ngModel testen = geprüft

element = angular.element("<div *directiveName* ><div><input type=\"checkbox\" ngModel=checked /> </div></div>"); 

     $rootScope = $rootScope.$new(); 
     $compile(element)($rootScope); 
     $rootScope.$digest(element); 

     scope = element.isolateScope(); 

Normalerweise würde ich Umfang gleich element.scope gesetzt(). Ich würde die isolateScope() Methode auf diesem Recht anrufen?

Ich glaubte, dass ich seit Umfang setze die Elemente gleich isolateScope() die Spezifikation so einfach wie

sein sollte
 expect(scope.ngModel).to.equal('checked'); 

jedoch scope.ngModel nicht definiert ist. Ich bin nicht sicher, was ich vermisse, wenn ich die Richtlinie erstelle oder den Test rufe. Jede Richtung würde sehr geschätzt werden.

+0

Hat Ihre Richtlinie einen isolierten Bereich? versuch scope = element.isolateScope() || element.scope; um beide Szenarien abzudecken. – sdfacre

Antwort

1

Sie geben den Wert nicht korrekt in das Element ein. Es sollte sein:

element = angular.element("<div *directiveName* ><div><input type=\"checkbox\" ng-model=checked /> </div></div>"); 

die ng-Modell Sein Wechsel statt ngModel.

Ich würde auch empfehlen, einen anderen Namen für Ihr benutzerdefiniertes Attribut in der Direktive wegen der Verwechslung mit der eingebauten Winkelanweisung zu verwenden.

+0

Ich würde, wenn es meine Anweisung wäre zu schreiben. Ich teste es einfach. Das ngModel ist genau, wie sie es getan haben – Winnemucca

+0

, so dass Sie das Attribut nicht umbenennen können, aber Sie müssen es immer ng-Modell anstelle von ngModel im Test haben html – Austin

+0

Ich sehe, was Sie sagen. Ich habe den Camel Casing Fehler festgestellt. Das ngModel ist jedoch in meinem Test noch nicht definiert. Nicht sicher, was ein zusätzlicher Schritt wäre. – Winnemucca