0

Я пытаюсь проверить приемник из $ broadcast (от контроллера) в моей директиве через .on.Тестирование .on в директиве ожидаемая функция шпиона получена

Директива:

describe('<-- myDirective Spec ------>', function() { 

    var scope, $compile, element, $httpBackend, rootScope; 

    beforeEach(angular.mock.module('myApp')); 

    beforeEach(inject(function (_$rootScope_, _$compile_, _$httpBackend_) { 
     scope = _$rootScope_.$new(); 
     $compile = _$compile_; 
     $httpBackend = _$httpBackend_; 
     rootScope = _$rootScope_; 

     var html = '<my-directive></my-directive>'; 
     element = $compile(angular.element(html))(scope); 

     spyOn(scope, '$broadcast').and.callThrough(); 
     scope.$digest(); 
    })); 

    it('should be defined', function() { 
     expect(element).toBeDefined(); 
    }); 

    it('should broadcast ', function() { 
     scope.$broadcast('sendEmail'); 
     expect(scope.$on).toHaveBeenCalledWith('sendEmail', jasmine.any(Function)); 
    }); 
}); 

С выше, я получаю ошибку:

Expected a spy, but got Function. 
+1

Вы шпионит '$ объеме. $ Broadcast', а не' $ on'. – Lee

ответ

1

Update:

Вы можете либо тест просто, если ваш $ широковещательный вызывался с

expect(scope.$broadcast).toHaveBeenCalled() 

или на самом деле проверить $ на что-то сделать, как

scope.$on('sendEmail', spyFunction) 
expect(spyFunction).toHaveBeenCalledWith('sendEmail') 

Причина: $ трансляции фактически не требует $ на функцию. $ on - это слушатель, который вызывает функцию обратного вызова (передается как второй аргумент), когда он прослушивает событие (первый аргумент).

В данный момент вы просматриваете функцию широковещательной передачи в $ широковещательном режиме и ставили тест на функцию $ on. Вам нужно заменить

spyOn(scope, '$broadcast').and.callThrough(); 

по

spyOn(scope, '$on').and.callThrough(); 
+0

устал от этого, см. Ошибку: ожидаемый шпион $, который был вызван с помощью ['sendEmail', ], но он никогда не вызывался. –

+1

Это другая проблема. Это означает, что ваш тест терпит неудачу, т. Е. $ On не получает вызов, причина: он никогда не получает вызов, это функция обратного вызова, которую вы передаете, в качестве второго аргумента, который вызывается, с первым аргументом в качестве параметра. – yoogeeks

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

  • Нет связанных вопросов^_^