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