2016-06-29 2 views
4

Мне нужно проверить контроллер с элементом $ внутри. Так что у меня есть функция, как это:

function func($event) { 
     $element.find('#la-la-la').focus(); 
} 

и сделать его в тесте:

template = $compile(element)($scope); 
$scope.$apply(); 

controller = element.controller('myDirective'); 

И то, что я пытаюсь сделать, это проверить эту функцию внутри этого контроллера для директивы.

describe('func method', function testFunc() { 
    it('should focus on element', function checkFocusing() { 
     controller.func(); 
     expect(focusSpy).toHaveBeenCalled(); 
    }); 
}); 

Где «focusSpy» является шпионом внутри насмешливого сервиса $ element. Но кажется, что если я использую $ provision.service ('$ element', ...), это не проверяется тестом. Ввод его в $ scope. $ Element перед компиляцией тоже не работает. Спасибо!

ответ

2

Хорошо, я нашел возможное решение. Вы не можете издеваться над $ element, потому что это приватная переменная контроллера директив, но поскольку это элемент jQuery, вы можете просто подглядывать на сам jQuery:

describe('func method', function testFunc() { 
    it('should focus on element', function checkFocusing() { 
     spyOn($.fn, 'find').and.callThrough(); 
     spyOn($.fn, 'focus').and.callThrough(); 

     controller.func(); 

     expect($.fn.find).toHaveBeenCalledWith('#la-la-la'); 
     expect($.fn.focus).toHaveBeenCalled(); 
    }); 
}); 
Смежные вопросы