如何使用httpBackend测试angularJS服务?

时间:2013-09-30 11:15:01

标签: angularjs testing

我对angularJS很新。尝试使用httpBackend测试角度服务但无法使其正常工作。我究竟做错了什么?在SO上尝试了其他类似问题的答案,但我得到的最接近的是以下(仍然不起作用,xData未定义):

xApp.services.js

'use strict';
var services = angular.module('xApp.services', []);
services.factory('xService', function ($http, $location) {
    var urlPath = $location.path() || 'http://localhost:8000';
    var xData;

    var getXData = function () {
        var promise = $http.get(urlPath + '/xData')
            .then(function (res) {
                xData = res.data;
                return xData;
            });
        return promise;
    };
    return {
       getXData:  getXData
    };
});

xServiceSpec.js

describe('xService', function () {
    beforeEach(module('xApp.services'));
    var $httpBackend;
    var xData;
    beforeEach(inject(function ($injector) {
        $httpBackend = $injector.get('$httpBackend');
        $httpBackend.when('GET', '/xData').respond(
            {
                _id: 25,
                name: "TestName",
                xarr: [
                    {
                        _id: 11,
                        name: "TestArrName",
                        created: "2013-09-29"
                    }
                ]
            }
        );
        $httpBackend.when('POST', '/newXArr').respond("ok");
    }));

    beforeEach(inject(function (xService) {
        xService.getXData().then(function (data) {
            xData = data;
        });
    }));

    describe('definition', function () {
        it('should be called', inject(function (xService) {
            xService.getXData().then(function (data) {
                xData = data;
            });
            expect(xData).toBeDefined();
        }));
    });
});    

1 个答案:

答案 0 :(得分:3)

正如@EduardGamonal在评论中提到的那样,您需要致电$httpBackend.flush(),但是在发出http请求之后,您应该将其称为,即xService.getXData()之后;否则,将没有未完成的http请求处理,因此$ httpBackend将为您提供"没有待处理的刷新请求#34;错误。