【发布时间】:2015-11-26 12:18:50
【问题描述】:
以下是我的 myService.spec.js :
'use strict';
describe('myService', function () {
var dependentService,dependentService1,rootScope,$q;
beforeEach(module('myModule.myConfig'));
beforeEach(module('myModule'));
beforeEach(inject(function (_myService_, _$rootScope_,
_$q_,_dependentService1_,_dependentService_) {
myService= _myService_;
rootScope = _$rootScope_.$new();
$q = _$q_;
dependentService1= _dependentService1_;
dependentService= _dependentService_;
spyOn(dependentService1,'setPath');
spyOn(dependentService,'get');
spyOn($q,'all').and.callFake(function(){
var deferred = _$q_.defer();
if($q.all.calls.count() === 1){
deferred.resolve([{path:'./abcd'}]);
}else if($q.all.calls.count() === 2){
deferred.resolve([{path:'./abcd','user': {'userId':'xyz',
'groups':['G1']}}]);
}else{
deferred.resolve({});
}
return deferred.promise;
});
}));
it('should load path, information',function(){
var promise = myService.load();
rootScope.$apply();
expect(dependentService.get).toHaveBeenCalled();
expect(dependentService1.setPath).toHaveBeenCalledWith('./abcd');
});
});
这是我的 MyService.js
'use strict';
function myService($q,dependentService1,dependentService){
var appConfigLoaded = false;
function _loadPath(){
return dependentService.get(dependentService1.url);
}
return {
load : function(){
var loadPath = _loadPath(),
finalDeferred = $q.defer();
$q.all([loadPath ]).then(function (results) {
var path = results[0].path ,
user = results[0].user;
dependentService1.setPath(path);
$q.all([_loadDataPromise1(),_loadDataPromise2()]).then(function(results){
finalDeferred.resolve(results);
},function(reason){
finalDeferred.reject(reason);
});
},function(reason){
finalDeferred.reject(reason);
});
return finalDeferred.promise;
}
};
}
angular.module('myModule.myConfig').service('myService', MyService);
为简洁起见,省略了以下包含它们的函数和服务,但它们返回承诺。就像我监视其他两个服务一样,我也监视了它们。
loadDataPromise1() and loadDataPromise1()
现在我收到一些错误,例如 Unexpected request GET with URL,它指向一些 headers.template.html。但我什至没有调用 http 来获取这样的模板,也没有任何功能。曾经调用 $http.get 我已经监视了他们。
我试过了
$httpBackend.flush();
但发生同样的错误。可能是我以错误的方式做一些基本的事情。
如果我删除$rootScope.apply(),那么错误就会消失。但是,我的服务中附加到第一次调用$q.all() 的 .then() 函数没有被调用。
有什么可以帮助我的吗?
【问题讨论】:
标签: javascript angularjs unit-testing jasmine angularjs-q