2014-01-02 1 views
0

У меня есть $rootScope и $scope настройка для прослушивания определенных событий. В модульном тесте (Жасмин) я хотел бы протестировать обработчик контроллера $scope.$on, но не $rootScope.$on, который вышел из области тестирования. Итак, я попытался spyOn $rootScope.$on, чтобы сделать его называют поддельную функцию с кодом ниже

$rootScope = _$rootScope_; 
$scope = $rootScope.$new(); 
spyOn($rootScope, '$on').andCallFake(function() { }); //let $rootScope skip the $on handler 

Unfortunetaly, я нашел код приводит в $scope быть также шпионил на которых не ожидается.

Любое решение по этому вопросу?

ответ

2

Проблема в том, что $ scope наследует от $ rootScope и использует один и тот же «$ on».

Единственное решение, которое я могу видеть это установить $ на функции на объекте $ области действия непосредственно (таким образом $ сфера не будет наследовать $ на функции):

// Affect $on function on $scope object 
// This way $scope has its own $on function 
$scope.$on = $rootScope.$on; 

// Spy $on function on $rootScope only 
spyOn($rootScope, '$on'); 

Смотрите эту скрипку: http://jsfiddle.net/dv5TA/1

+0

Oh , $ scope. $ on наследуется от $ rootScope, спасибо! – Shuping

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