2015-06-09 118 views
2

我正在尝试为依赖于$ rootScope。$的服务编写一些karma/jasmine/sinon单元测试,以触发它出去并获取一些数据。我的主要问题是,即使我在beforeEach中执行$ rootScope。$ broadcast,我似乎也无法获取$ rootScope。$ on事件。任何帮助将非常感激。

的服务...

(function (angular) { 
    'use strict'; 

    angular.module('myModule') 
     .service('myService', myService); 

    myService.$inject = ['$rootScope','dependencyService1','dependencyService2','$q']; 

    function myService($rootScope,dependencyService1,dependencyService2,$q) { 

     var massagedData; 

     $rootScope.$on('myEvent', function (event, data) { 
      var info1 = dependencyService1.getSomeInfo(); 
      var info2 = dependencyService2.getSomeOtherInfo(); 
      massagedData = massageData(info1,info2); 

     } 

     return { 
      getPreFetchedData: function(){return massagedData;} 
     } 

    } 
}  

测试

describe('Service fetches data', function() { 
    var myService, $rootScope; 

    beforeEach(module('myModule')); 

    beforeEach(inject(function(_$rootScope_,_myService_,dependencyService1,dependencyService2,$q) { // jshint ignore:line 
      myService = _myService_; 
      $rootScope = _$rootScope_; 

      var fakeResults = { 
       1: {someInfo:'info'} 
      };    

      spyOn(dependencyService1, 'getSomeInfo').and.returnValue($q.when(fakeResults)); 
      spyOn(dependencyService2, 'getSomeOtherInfo').and.returnValue($q.when(true)); 

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

      $rootScope.$broadcast('myEvent',{eventData:'data'}); 

      $rootScope.$digest(); 

     }) 
    ); 

    it('Fetches and massages data on event', function() { 
      var results = myService.getPreFetchedData(); 
      expect(results.someProperty).toEqual('info'); 

    }); 

}); 

我已经看到了一个控制器,你可以注入一个范围进行明确的相关性做这样的事情的几个例子,但没有任何人在服务中这样做的例子(也许是有原因的?)。

回答

0

显然我有一些令人敬畏的错字导致我的问题:^)