2013-12-09 4 views
0

У меня есть директива, которую я пытаюсь проверить. Вот директива:Как получить доступ к attr в директиве при тестировании - Angularjs

App.directive('resize', function($animate) { 
    return function(scope, element, attrs) { 
    scope.$watch(attrs.resize, function(newVal) { 
     if(newVal) { 
     $animate.addClass(element, 'span8'); 
     } 
    }); 
    }; 
}); 

А вот мой тест:

describe('resize', function() { 
    var element, scope; 
    beforeEach(inject(function($compile, $rootScope) { 
    var directive = angular.element('<div class="span12" resize="isHidden"></div>'); 
    element = $compile(directive)($rootScope); 
    $rootScope.$digest(); 
    scope = $rootScope; 
    })); 

    it('should change to a span8 after resize', function() { 
    expect($(element).hasClass('span12')).toBeTruthy(); 
    expect($(element).hasClass('span8')).toBeFalsy(); 
    element.scope.newVal = 'changed'; 
    scope.$apply(); 
    expect($(element).hasClass('span8')).toBeTruthy(); 
    }); 
}); 

Я пытаюсь получить доступ к моей attrs переменной, изменить его $apply и посмотреть, если class изменяется, как предполагается делать. Я не могу изменить attrs. На самом деле я даже не могу найти способ получить к нему доступ. Как мне получить доступ к attrs в моем тесте?

ответ

1

element - jqLite object, или простой объект jQuery (если вы загружаете jQuery перед AngularJS). Просто используйте .attr() метод:

it('should do something on attr change', function(){ 
    element.attr('resize', 'newValue'); 
    $scope.$apply(); 
}); 

Не нужно обернуть элемент в новый объект JQuery: $(element) использовать метод .hasClass(value)

+0

Я могу установить атрибут с этим 'element.attr (» resize ',' newvalue ') ', но когда я пытаюсь получить доступ к тому, что' attrs' существует с 'element.attrs()', я получаю 'TypeError: Can not read property' nodeType 'undefined'. Почему это? – jhamm

+0

Мне нужно задать свойство, например 'element.attr ('resize')' – jhamm

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