2014-05-29 2 views
0

В приведенной ниже директиве проверяется/загружает шаблон со значением «pass, fail, required». условия являютсяСоздание теста жасмина для угловой директивы

if(parent value == required){ 
1. if the value is true --> $scope.msg = "fail" --> loads the template with {{msg}} value 
2. if the value is false --> $scope.msg = "pass" --> loads the template with {{msg}} value 
} 

В деталях,

загрузки шаблона: [showerror.html]

<div>{{msg}}</div> 

Директива Вызов:

<div show-error="obj"></div> 

(OBJ содержит в качестве obj.error и obj.required)

Директива:

angular.module("dsf").directive('showError', [ 

    function() { 
     'use strict'; 

     return { 
      scope: { 
       obj: '=showError' 
      }, 
      link: function ($scope) { 

       $scope.showError = {}; 
       $scope.msg = ""; 

       function setTemplate(filename) { 
        $scope.showError.template = 'app/path/' + filename + '.html'; 
       } 

       $scope.$watch(function() { 

        if ($scope.obj.required === true) { 
         if ($scope.obj.error === false) { 
          $scope.msg = "Pass"; 
         } else if ($scope.obj.error === "required") { 
          $scope.msg = "Required"; 
         } else if ($scope.obj.error === true) { 
          $scope.msg = "fail"; 
         } 

        } else { 

         if ($scope.obj.error === true) { 
          $scope.msg = "fail"; 
         } else if ($scope.obj.error === false) { 
          $scope.msg = "Pass"; 
         } 

        } 

        setTemplate("showerror"); 
       }); 


      }, 
      template: '<div ng-include="showError.template"></div>' 
     }; 
    } 
]); 

Как я новичок в тесте жасмин, как я могу написать тест для этой директивы? какие-либо предложения?

Хорошо. Я написал единичный тест для этой директивы. Что случилось сейчас?

describe('showError', function() { 
    'use strict'; 
    var compile, $scope, element; 
    beforeEach(module('dsf')); 

    beforeEach(inject(function ($compile, $rootScope) { 
     element = angular.element('<div show-error="obj"></div>'); 
     $scope = $rootScope.$new(); 
     compile = function (obj) { 
      $scope.obj = obj; 
      $compile(element)($scope); 
      $scope.$digest(); 
     }; 
    })); 
    it('updates the element when obj validation changes', function() { 
     var obj; 
     obj = {}; 
     $scope = compile(obj); 
     $scope.apply(function() { 
      obj.required = true; 
      obj.error = true; 
     }); 
     expect($scope.obj.msg).toContain('fail'); 
     $scope.apply(function() { 
      obj.required = true; 
      obj.error = false; 
     }); 
     expect($scope.obj.msg).toContain('Pass'); 
     $scope.apply(function() { 
      obj.required = true; 
      obj.error = "required"; 
     }); 
     expect($scope.obj.msg).toContain('Required'); 
     $scope.apply(function() { 
      obj.required = false; 
      obj.error = true; 
     }); 
     expect($scope.obj.msg).toContain('Pass'); 
     $scope.apply(function() { 
      obj.required = false; 
      obj.error = false; 
     }); 
     expect($scope.obj.msg).toContain('fail'); 
    }); 
}); 

Я получаю сообщение об ошибке:

undefined is not an object (evaluating $scopr.apply) error 

ответ

0

Команда, которую вы ищете, $scope.$apply() не $scope.apply().

+0

Да. Я понял. Можете ли вы сказать мне, что тест подходит именно для этого каталога? – user3686652

 Смежные вопросы

  • Нет связанных вопросов^_^