2017-09-21 3 views
-1

zu bedecken Ein Problem beim Schreiben der Komponententests für einen der Controller in angular JS. Ich benutze Karma Jasmin 2.8.0.Wie schreibe ich Komponententest mit Jasmin, um DOM in Winkelregler

Controller-Code: -

var checkedlength = angular.element(e.target).parents('checkbox').find('input[type="checkbox"]:checked').length;}); 

if(checkedlength === 0){/* code here */} 
else {/* code here */} 

Wo e ist das Ereignis.

Ich wollte Komponententest mit Jasmin schreiben, so dass sowohl if als auch andere Teil abgedeckt werden können.

Jede Hilfe würde sehr geschätzt werden.

+0

Ich glaube nicht, die Frage ist klar genug. Vor allem, was willst du testen? Welche Fälle sollten abgedeckt werden? Zweitens ist das Codebeispiel sehr kurz und enthält keinen angularspezifischen Code außer angular.element, das im Wesentlichen nur ein dom-Lookup ist. Und dritten angularjs entmutigt dom manipulation in controllern. Sie sollten eine Direktive für Dom-Manipulation verwenden. Aber ich bin mir nicht sicher, was Sie versuchen zu tun. Wie ich schon sagte nicht genug Informationen/Code –

+0

Danke für die Antwort. – VKJava

+0

Wir haben einen Code geschrieben, der die Operation basierend auf der Anzahl der Checkboxen ausführen würde. Basierend auf der Länge der Logik geschrieben. Zu diesem Zweck wird die DOM-Manipulation in der Controller-Datei durchgeführt. Code wurde so geschrieben, dass die DOM-Manipulation in der Steuerung selbst mit dem eckle.element erfolgt. Wir verstehen, dass dies nicht dem Standard entspricht, aber dies wurde anfänglich irgendwie verpasst und der Kunde zwingt die 90% -Testabdeckung für die Bereitstellung. Also versuchen wir Unit-Testfälle zu schreiben und können diese Zeilen nicht abdecken und wir sind hier geschlagen. – VKJava

Antwort

0

Den Aufruf angle.element verwerfen. Etwas wie das. Es ist nicht vollständig, aber sollte Sie beginnen.

var arrayOfCheckboxes = ['checbox1', 'checkbox2']; 
var angularSpy; 
var elementFunction = function(e){ return anyMockedElement; } 
var domCheckBoxes = { 
    find: function(searchString){ 
     if(string === 'input[type="checkbox"]:checked'){ 
      return arrayOfCheckboxes; 
     } 
    } 
} 
var anyMockedElement = { 
    parents: function(string) { 
     if(string === 'checkbox'){ 
      return domCheckBoxes; 
     } 
    } 
} 

beforeEach(function() { 
    angularSpy = spyOn(angular, 'element').andCallFake(elementFunction); 
}); 

afterEach(function() { 
    angularSpy.andCallThrough(); 
}); 
+0

Danke David. Es hat gut funktioniert, als wir das gleiche versucht haben, wie Sie es vorgeschlagen haben, aber mit leichten Modifikationen. – VKJava

+0

Gern geschehen. Könnten Sie meine Antwort annehmen/oder Ihre Antwort geben? –

Verwandte Themen