2013-11-02 2 views
1

я хотел бы модульное тестирование на некоторые логики в моей директиве:AngularJS: методы Stubbing JQlite

... 
link: function ($scope, $element) { 
    var rightMargin = 3; 
    var w = $element.find('span')[0].scrollWidth; 
    if (w > 100) { 
     $element.css('width', (w + rightMargin) + 'px'); 
    } 
... 

Поскольку служба $ компилировать на самом деле не добавлять элементы на документе, scrollWidth всегда возвращает 0. Так что я не знаю, как заглушить возвращаемое значение вызова $ element.find, потому что нет способа получить доступ к экземпляру $ element в моем модульном тесте.

ответ

1

Попробуйте установить HTML страницы прямо внутри тела

Использование innerHTML:

angular.element(document.body).html('<div class="my-elm" my-directive></div>'); 
var elm = angular.element(document.body.querySelector('.my-elm')); 
$compile(elm)($rootScope); 

Или с помощью добавления:

var elm = angular.element('<div class="my-elm" my-directive></div>'); 
angular.element(document.body).append(elm); 
$compile(elm)($rootScope); 
1

Если это тест единица, то вы не должны «Не проверяйте внешние зависимости, только то, что вы логично, точно. Я бы это проглотил.

spyOn($element,'css'); 
#call your code here 
expect($element.css).toHaveBeenCalledWith('width','99px'); 
+0

Шпионаж от метода непосредственно от элемента не работает. Я получаю сообщение от sinon, говорящий «не мог вызвать восстановление неопределенного». – spinningarrow

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