angular jasmine 多个嵌套的 httpbackend 调用
angular jasmine multiple nested httpbackend calls
我正在尝试使用调用资源服务的 jasmine 测试 angularjs 服务,然后在 then 函数中调用另一个嵌套资源函数。我正在使用 httpbackend 来刷新模拟响应。问题是,在测试时,它没有刷新对第二个嵌套资源服务请求的第二个响应,我因错误 Error: Unflushed requests: 1[=13= 而出错]
餐厅服务
var deferred;
var restaurantinfo = {};
var loadMenu = function(){
return Menu.query({}).$promise.then(function(response){
restaurantinfo.menu = response
})
}
var loadLocation = function(){
return Location.query({}).$promise.then(function(response){
restaurantinfo.location = response;
})
}
var getRestaurantInfo = function(){
if(!deferred && (!restaurantinfo.menu.length == 0 || restaurantinfo.location.length === 0)){
deferred = $q.defer();
return loadMenu()
.then(loadLocations)
.then(function(){
deferred.resolve(billinghistory);
return deferred.promise;
})
} else {
if(!deferred.promise.$$state.status){ return deferred.promise; }
deferred.resolve(billinghistory);
return deferred.promise;
}
}
测试规格
beforeEach(inject(function(_$httpBackend_, RestaurantService, _Menu_, _Locations_){
httpBackend = _$httpBackend_;
mockRestaurantService = _RestaurantService_;
httpBackend.expect('GET', '/api/menu').respond(mockMenu);
httpBackend.expect('GET', '/api/locations').respond(mockLocations);
mockBalanceService.getRestaurantInfo();
httpBackend.flush()
}))
afterEach(function(){
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
})
loadMenu 和 loadLocation 函数只调用 angular 资源服务
httpbackend 正在刷新对 api/menu 的第一次调用,但没有对 api/location 进行第二次调用
th 属性 : 'returnValue' 模拟 http 服务,并对调用进行 spyOn
var error = {
code : 500,
mensaje1:'err'
},
spyOn(getRestaurantInfo)
.and.returnValue({
then: function (callbackSuccess, callbackError) {
callbackError(error);
}
});
这将是对错误的承诺。
告诉我你的代码是否合适。
谢谢
好的,事实证明我只是刷新了一个后端调用。我添加了另一个 httpBackend.flush() 并且两个后端调用都被刷新了。
我正在尝试使用调用资源服务的 jasmine 测试 angularjs 服务,然后在 then 函数中调用另一个嵌套资源函数。我正在使用 httpbackend 来刷新模拟响应。问题是,在测试时,它没有刷新对第二个嵌套资源服务请求的第二个响应,我因错误 Error: Unflushed requests: 1[=13= 而出错]
餐厅服务
var deferred;
var restaurantinfo = {};
var loadMenu = function(){
return Menu.query({}).$promise.then(function(response){
restaurantinfo.menu = response
})
}
var loadLocation = function(){
return Location.query({}).$promise.then(function(response){
restaurantinfo.location = response;
})
}
var getRestaurantInfo = function(){
if(!deferred && (!restaurantinfo.menu.length == 0 || restaurantinfo.location.length === 0)){
deferred = $q.defer();
return loadMenu()
.then(loadLocations)
.then(function(){
deferred.resolve(billinghistory);
return deferred.promise;
})
} else {
if(!deferred.promise.$$state.status){ return deferred.promise; }
deferred.resolve(billinghistory);
return deferred.promise;
}
}
测试规格
beforeEach(inject(function(_$httpBackend_, RestaurantService, _Menu_, _Locations_){
httpBackend = _$httpBackend_;
mockRestaurantService = _RestaurantService_;
httpBackend.expect('GET', '/api/menu').respond(mockMenu);
httpBackend.expect('GET', '/api/locations').respond(mockLocations);
mockBalanceService.getRestaurantInfo();
httpBackend.flush()
}))
afterEach(function(){
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
})
loadMenu 和 loadLocation 函数只调用 angular 资源服务
httpbackend 正在刷新对 api/menu 的第一次调用,但没有对 api/location 进行第二次调用
th 属性 : 'returnValue' 模拟 http 服务,并对调用进行 spyOn
var error = {
code : 500,
mensaje1:'err'
},
spyOn(getRestaurantInfo)
.and.returnValue({
then: function (callbackSuccess, callbackError) {
callbackError(error);
}
});
这将是对错误的承诺。 告诉我你的代码是否合适。 谢谢
好的,事实证明我只是刷新了一个后端调用。我添加了另一个 httpBackend.flush() 并且两个后端调用都被刷新了。