2014-09-19 2 views
2

Я пытаюсь заставить ng-repeat работать в тесте на угловую директиву, но представление не обновляется при обновлении переменных $ scope и $ digest() называется.Угловой ng-repeat не работает в тесте Жасмин

'use strict'; 

describe('Asset tests', function() { 
    var $compile, 
     $rootScope, 
     $scope, 
     $timeout, 
     templateHtml = '<span ng-repeat="asset in assets">{{asset.id}}</span>', 
    view; 

    beforeEach(function() { 
     module('my.module'); 
     inject(function(_$compile_, _$rootScope_, _$timeout_) { 
      $compile = _$compile_; 
      $rootScope = _$rootScope_; 
      $timeout = _$timeout_; 
      $scope = $rootScope.$new(); 

      $scope.assets = []; 
      $scope.selectedItems = []; 
      $scope.deleteAsset = function() { 
       console.log('yay'); 
      }; 
      view = angular.element(templateHtml); 
      $compile(view)($scope); 
      $scope.$apply(); 
     }); 
    }); 

    describe('Testing some stuff', function() { 
     it('should test some stuff', function() { 
      for(var i = 0; i < 3; i ++) { 
       $scope.assets.push({id:i, name: 'Rad ' + i}); 
      }; 
      $scope.$digest(); 
      console.log(view); 
      console.log(jQuery('span').length); 
     }); 
    }); 
}); 

Вход заявления Выход:

LOG: {0: <span ng-repeat="assets in assets">{{asset.id}}</span>, length: 1} 
LOG: 56 

ответ

2

Я не думаю, что HTML шаблон правильно компиляции. Он говорит assets in assets и должен быть asset in assets. Попробуй это.

Плюс, я думаю, что вы не компилируете правильную вещь. Вы компилируете текстовый шаблон, но не фактический элемент представления.

view = angular.element(templateHtml); 
$compile(view)($scope); 
+0

спасибо, что указал эти вещи. По-прежнему получается тот же результат. См. Редактирование исходного кода. – binarygiant

0

Этот вопрос старый, но я столкнулся с подобной проблемой, поэтому я размещаю то, что сработало для меня. Моя проблема была в шаблоне. Мне нужно было добавить div или что-то, чтобы обернуть span, в котором был ng-repeat. В этом случае меняется от:

templateHtml = '<span ng-repeat="asset in assets">{{asset.id}}</span>' 

в

templateHtml = '<div><span ng-repeat="asset in assets">{{asset.id}}</span></div>' 

будет делать трюк.

Надеюсь, это поможет кому-то.