2015-08-06 3 views
1

В моем угловом проекте у меня есть директива, отображающая значок по умолчанию до загрузки настоящего аватара.Угловая загрузка тестового изображения с помощью Jasmine

function avatarDirective(API) { 

    var DEFAULT_AVATAR = 'img/default-avatar.png'; 

    return { 
     restrict : 'A', 
     scope  : { 
     avatarUrl: '=' 
     }, 
     link: linkFunc 
    }; 


    function linkFunc($scope, $element) { 
     $element.attr('src', DEFAULT_AVATAR); 

     $scope.$watch(function() { 
     return $scope.avatarUrl; 
     }, _setAvatar); 


     function _setAvatar() { 
     if ($scope.avatarUrl) { 

      var avatar = new Image(); 
      avatar.onload = function() { 
      $element.attr('src', API.BASE_URL + $scope.avatarUrl); 
      } 
      avatar.src = API.BASE_URL + $scope.avatarUrl; 
     } 
     } 
    } 

    } 

Этот код работает правильно, без проблем. Но я не могу проверить его с помощью кармы. Действительно, функция загрузки никогда не срабатывает. Вот мой тест ниже.

it('should set the default avatar if avatar-url is empty', function(done) { 
    element = angular.element('<img class="img-circle" dod-avatar avatar-url="avatar"/>'); 
    element = $compile(element)($scope); 
    $scope.avatar = 'img/new-avatar.png'; 
    $scope.$digest(); 

    expect(element.attr('src')).toContain('img/new-avatar.png'); // FAILED 

    }); 

Спасибо

ответ

0
expect(element.attr('src')).toContain('img/new-avatar.png'); // FAILED 

Это всегда будет терпеть неудачу. Функция attr() возвращает значение атрибута, а matchContain от Jasmine обрабатывает только массивы (jasmine docs).

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