我如何模仿angularJs 1.x中返回承诺的工厂
我有一个工厂,它从$http返回一个承诺我如何模仿angularJs 1.x中返回承诺的工厂,angularjs,unit-testing,Angularjs,Unit Testing,我有一个工厂,它从$http返回一个承诺 angular.module('app.core') .factory('dataService', dataService); dataService.$inject = ['$http']; function dataService($http){ return $http.get('/getLocalSession') .then(function(response){ return resp
angular.module('app.core')
.factory('dataService', dataService);
dataService.$inject = ['$http'];
function dataService($http){
return $http.get('/getLocalSession')
.then(function(response){
return response.data;
});
}
这是使用上述工厂的另一项服务
angular.module('app.core')
.service('analytics', analytics);
analytics.$inject = ['dataService'];
function analytics(dataService){
dataService.then(function(data){
//do something with data
});
}
这是对分析服务的测试
describe('analytics service', function(){
var analytics, $q, dataService, $rootScope;
var testLanId = 'user001';
beforeEach(module('app.core'));
beforeEach(module({
dataService: $q.when({
lanId: testLanId
})
}));
beforeEach(inject(function(_analytics_, _$q_, _$rootScope_){
analytics = _analytics_;
$q = _$q_;
$rootScope = _$rootScope_;
}));
it('expect it to do something', function(){
$rootScope.$apply();
//expect specs
});
});
但是,这不起作用,因为在调用inject之前没有定义$q。
我已经看到了,但是他们有一个服务返回一个函数,返回一个承诺
如何模拟返回承诺的工厂?使用angular.mock.module的函数参数并提供$q作为依赖项
beforeEach(module(function($provide){
$provide.factory('dataService', function($q){
return $q.when({lanId: testLanId});
});
}));