2013-05-29 6 views
3

У меня возникла проблема с тестированием директивы, которая обертывает компонент ng-grid.Директива об испытании единицы внутри директивы

Я написал эту punkler, который показывает проблему: http://plnkr.co/edit/HlB8Bt9M2TzsyM6XaDso?p=preview

Существует много кода, я знаю, но я не могу уменьшить его больше.

В принципе, существует директива custom-grid, которая обертывает компонент ng-grid из углового-ui. Я сделал эту директиву, потому что у меня много сеток в моем приложении, и я бы не дублировал конфигурацию сетки.

Сетка, отображаемая поверх результатов теста, использует эту директиву. Итак, вы можете видеть, что он отлично работает :)

Однако, возможно, что-то я пропустил, как проверить эту директиву. Я написал простой тест, который утверждает, что первая строка, первая колонка отображает «Мартони», но она терпит неудачу. Тот же тест с использованием директивы ng-grid.

Любая идея, что не так в моем тестовом коде?

ответ

2

http://plnkr.co/edit/WwTyuQXNklL7CnjOxsB2?p=preview

У меня были проблемы перед вызовом директивы рекурсивно (или, по крайней мере, вложенные-л), особенно, когда они делают использование $compile услуг (и ng-repeat «с, особенно). Я убежден, что там есть ошибка, но я не нашел времени, чтобы найти изолированный случай. В любом случае, я думаю, что то, что вы нашли, является своего рода ошибкой, но есть простой способ обхода проблемы.

Если вы посмотрите на источник для ngGrid, вы увидите, что столбцы добавляются только в том случае, если ширина достаточно велика. Когда я вошел в ваш второй пример, w был отрицательным, что привело к тому, что addCol никогда не вызывался.

var w = col.width + colwidths; 
if (col.pinned) { 
    addCol(col); 
    var newLeft = i > 0 ? (scrollLeft + totalLeft) : scrollLeft; 
    domUtilityService.setColLeft(col, newLeft, self); 
    totalLeft += col.width; 
} else { 
    if (w >= scrollLeft) { 
     if (colwidths <= scrollLeft + self.rootDim.outerWidth) { 
      addCol(col); 
     } 
    } 
} 
colwidths += col.width; 

Это привело меня к мысли, что элементы имели 0 высота/ширина, которая могла бы быть, потому что они не были на самом деле в документе, в то время как они были блок испытания.

Так, чтобы исправить это, я добавил следующее перед вашим compile(elm)($scope);

angular.element('body').append(elm); 

А потом убирать:

afterEach(function() { 
    angular.element(elm).remove(); 
}); 

Я не знаю, было ли это намеренно или нет, но вы назвали $new() на $rootScope в первом модульном тесте, но не использовал результат для компиляции, тогда как вы сделали это во втором.

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