angularjs - angular jasmine 多个嵌套的 httpbackend 调用

标签 angularjs http jasmine angular-promise httpbackend

我正在尝试使用调用资源服务的 jasmine 测试 angularjs 服务,然后在 then 函数中调用另一个嵌套资源函数。我正在使用 httpbackend 来刷新模拟响应。问题是,在测试时,它没有刷新对第二个嵌套资源服务请求的第二个响应,我因错误 Error: Unflushed requests: 1

而出错

餐厅服务

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 进行第二次调用

最佳答案

第 property : 'returnValue' 模拟 http 服务,并对调用进行 spyOn

var error = {
                code : 500,
                mensaje1:'err'
            },

                spyOn(getRestaurantInfo)
                .and.returnValue({
                    then: function (callbackSuccess, callbackError) {
                        callbackError(error);
                    }
                }); 

这将是对错误的 promise 。 告诉我你的代码是否合适。 谢谢

关于angularjs - angular jasmine 多个嵌套的 httpbackend 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40670825/

相关文章:

php - 取消 HTTP POST 请求服务器端

javascript - 测试未在 karma/jasmine/require.js 上运行 'There is no timestamp for *lib*!' 错误

javascript - 在 Protractor 中启用元素时单击

exception-handling - AngularJS中应用程序异常处理的推荐做法

ruby-on-rails - HTTP 请求适用于 Postman 但不适用于 Rails

c# - 如何从另一个用 AngularJS 构建的网站上抓取数据?

javascript - 如何获取最大参数来确定浏览器问题?

AngularJS 与 $resource 和 $httpBackend 的奇怪行为

AngularJS - 同时检测未定义的空值或空值的最佳方法是什么?

javascript - 更改 Angular Material 输入样式