2014-01-20 2 views
0

Я протестировал свой код javascript с жасмином, но когда я вижу, что у меня есть тесты на модульные тесты jenkins, у меня есть несколько строк, которые не отмечены зеленым (не проверены). Так вот почему я задаю свой вопрос:Angularjs frontend Jasmine unit test issue

-> Предполагая, что tagStyle.length = 0

   $scope.isTagStylesNotEmpty = function() { 
        if($scope.tagStyles.length >= 0) /* This line is RED (not covered) */ 
        { 
          return true;/* This line is Green OK*/ 
        } 
       } 

-> Мой тест заключается в следующем:

it('Unit test isTagStylesNotEmpty()', inject(function($httpBackend) { 
    expect($scope.isTagStylesNotEmpty).toBeDefined(); 
    $scope.isTagStylesNotEmpty(); 
    expect($scope.tagStyles.length).toBe(0); 
    })); 

Любые идеи о том пункте?

Второй вопрос такой же, как и первый, но немного сложнее:

У меня есть следующий Javascript файл, который я хочу модульного тестирования с жасмином:

$scope.ajouterProfilTag = function(lastDocId) { 

    $scope.tagStyles.forEach(function(item) { 
        /*Not covered from here (by jenkins)--------------------*/ 
     var profilTag = { 
      tag: item.id_tag, 
      texte: item.style, 
      profil: lastDocId, 
      tagName: item.label, 
      police: item.police, 
      taille: item.taille, 
      interligne: item.interligne , 
      styleValue: item.styleValue, 
     }; 

     $http.post('/ajouterProfilTag', profilTag) 
      .success(function(data) { 

       $scope.profilTagFlag = data; /* unit tests */ 
       $scope.afficherProfils(); 
       $scope.profilTag = {}; 
       $scope.tagStyles.length = 0; 
       $scope.tagStyles = []; 
      /*Until here --------------------*/ 
     }); 

    }); 

    $scope.tagList = {}; 
    $scope.policeList = {}; 
    $scope.tailleList = {}; 
    $scope.interligneList = {}; 
    $scope.weightList = {}; 

}; 

мой модульного тестирования является то, как это:

var profil = { 
    _id: "52d8f928548367ee2d000006", 
    photo: "./files/profilImage.jpg", 
    descriptif: "descriptif3", 
    niveauScolaire: "CM2", 
    type: "Dyslexie N2", 
    nom: "Nom3" 
    }; 



    var profilTag = { 
     _id: "52d8f928548367ee2d000006", 
     tag: "tag", 
     texte: "texte", 
     profil: "profil", 
     tagName: "tagName", 
     police: "Arial", 
     taille: "eight", 
     interligne: "fourteen", 
     styleValue: "Bold" 
     } 

    beforeEach(inject(function($controller, $rootScope, $httpBackend) { 
     $scope = $rootScope.$new(); 
     controller = $controller('ProfilesCtrl', { 
      $scope: $scope 
     }); 


     $httpBackend.whenPOST('/ajouterProfilTag').respond(profilTag); 



     })); 

     it('ProfilesCtrl:ajouterProfilTag should set ajouterProfilTag function', inject(function($httpBackend) { 
     expect($scope.ajouterProfilTag).toBeDefined(); 
     $scope.ajouterProfilTag(profil._id); 
      $httpBackend.flush(); 
      expect($scope.profilTagFlag).toEqual(profilTag); 

     })); 

Anyh идеи о том, как у меня есть к единице проверить мой второй метод (AjouterProfilTag) ?? Заранее спасибо

+0

В вашей первой части. Как вам удалось заполнить $ scope для [чего-то] контроллера ?. Из вашего кода я предполагаю, что он не определен. – Dalorzo

+1

Что касается вашей второй части, я думаю, это контроллер, не так ли? – Dalorzo

+0

@ Dalorzo да, это контроллер, который я пытаюсь выполнить с жасмином. Я сделал следующее внутри перед каждым '$ scope = $ rootScope. $ New(); controller = $ controller ('ProfilesCtrl', { $ scope: $ scope }); ' – badaboum

ответ

0

Просто догадаться, так как я не вижу контроллера, но похоже, что $ scope.tagStyles - это просто пустой объект. Это означает, что forEach не будет иметь ничего, чтобы перебирать, поэтому он никогда не будет называть сообщение. Я хотел бы попробовать что-то вроде:

$scope.tagStyles = [{}]; 

перед тем

$scope.ajouterProfilTag(profil._id); 
Смежные вопросы