2016-03-22 1 views
0

Как сделать тест на жасмин для моей угловой директивы, которая должна протестировать его излучение?Как мне выполнить тест на жасмин для моей угловой директивы, которая должна протестировать его излучение?

Эта директива является директивой атрибута и имеет излучение внутри директивы, которую мне нужно проверить.

hows лучше всего это сделать?

Это мой текущий тест:

//broadcast test: 
    describe('broadcast called', function() { 

      var rootScope, testService; 

      beforeEach(inject(function(_$rootScope_, $injector) {    
       rootScope = _$rootScope_; 

       testService = $injector.get('testFactory'); 

       spyOn(rootScope, "broadcast"); 
      })); 

      it('should be broadcast', function() { 
       testService.emitTest(); 
       expect(rootScope.broadcast).toHaveBeenCalledWith('test1'); 
      }); 
    }); 

Текущий код:

appservicemod.factory('testFactory', ['$rootScope', function ($rootScope) { 

     var emitTest = function(){ 

        $rootScope.$broadcast('test1'); 

     } 

     return { 
      emitTest: emitTest 
     } 
    } 
]); 
+1

Шпион по объему 'emit' метод и убедитесь, что это calle d, когда вы ожидаете, что он будет вызван с ожидаемыми аргументами – Phil

+0

Что делает 'testService.emitTest'? Не могу сказать, что случилось, не зная об этом. –

+0

- это имя функции, в которой есть широковещательная передача. Я добавлю это выше, а также – AngularM

ответ

1

Кажется, что ваш нынешний подход работает отлично, за исключением нескольких вопросов, за исключением:

  • должно быть $broadcast, не broadcast везде
  • есть в вашем коде нет beforeEach(module('app'))

Если устранить эти проблемы , он работает: http://jsfiddle.net/MMiszy/c4fz58sp/1/

describe('broadcast called', function() { 
    var $rootScope, testService; 

    beforeEach(module('app')); 

    beforeEach(inject(function(_$rootScope_, $injector) {    
     $rootScope = _$rootScope_; 
     spyOn($rootScope, "$broadcast"); 
     testService = $injector.get('testFactory'); 
    })); 

    it('should broadcast', function() { 
     testService.emitTest(); 
     expect($rootScope.$broadcast).toHaveBeenCalledWith('test1'); 
    }); 
}); 
+0

что бы ожидалось? – AngularM

+0

Я просто хочу проверить, активирована ли трансляция? в приведенном выше примере я могу изменить test1 на test100, и это все равно проходит, поэтому не похоже на действительный тест – AngularM

+0

Я хочу, чтобы в режиме широковещания в режиме реального времени – AngularM

1

шпион

spyOn(scope, 'emit'); 

и в тесте проверить его называли

expect(scope.emit).toHaveBeenCalledWith('valueItShouldBeCalledWith'); 
+0

Как бы я сделал то же самое, но на заводе? – AngularM

+0

Что касается наблюдения за вызовом scope.emit, то нет разницы – Austin

+0

Я добавил свой текущий пример трансляции выше. Но не могу заставить его работать – AngularM

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