2017-09-21 1 views
-1

Je suis confronté à un problème lors de l'écriture des tests unitaires pour l'un des contrôleurs en JS angulaire. Im en utilisant Karma jasmin 2.8.0.Comment écrire un test unitaire en utilisant jasmin pour couvrir DOM dans le contrôleur angulaire

Code contrôleur: -

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

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

e est l'événement. Je voulais écrire un test unitaire utilisant du jasmin pour que les deux parties puissent être couvertes.

Toute aide serait grandement appréciée.

+0

Je ne pense pas que la question soit suffisamment claire. Tout d'abord qu'est-ce que tu veux tester? Quels cas devraient être couverts. Deuxièmement, l'exemple de code est très court et ne contient pas de code spécifique angulaire, sauf pour angulaire.element qui est essentiellement une simple recherche dom. Et le troisième angularjs décourage la manipulation dom dans les contrôleurs. Vous devriez utiliser une directive pour la manipulation dom. Mais je ne suis pas sûr de ce que vous essayez de faire. Comme je l'ai dit pas assez d'informations/code –

+0

Merci d'avoir répondu. – VKJava

+0

Nous avons écrit un code qui ferait l'opération basée sur le nombre de cases à cocher. Basé sur la longueur de la logique est écrite. Pour cela, la manipulation DOM est effectuée dans le fichier du contrôleur. Le code a été écrit de telle sorte que la manipulation du DOM est effectuée dans le contrôleur lui-même en utilisant le paramètre angular. Nous comprenons que ce n'est pas conforme à la norme, mais cela a été manqué d'une façon ou d'une autre et le client impose la couverture de 90% des tests unitaires pour que le déploiement ait lieu. Donc, nous essayons d'écrire des cas de tests unitaires et nous sommes incapables de couvrir ces lignes et nous sommes frappés ici. – VKJava

Répondre

0

Simule l'appel d'un élément angulaire. Quelque chose comme ça. Ce n'est pas complet mais devrait vous aider à démarrer.

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

Merci David. Cela a bien fonctionné quand nous avons essayé de la même manière que vous l'avez suggéré mais avec de légères modifications. – VKJava

+0

De rien. Pourriez-vous accepter ma réponse/ou fournir votre réponse? –