angularjs - 如何使用 httpBackend 测试 angularJS 服务?

标签 angularjs testing

我对 angularJS 很陌生。尝试使用 httpBackend 测试 Angular 服务,但无法使其正常工作。我究竟做错了什么?尝试了关于具有类似问题的其他答案,但我最接近的是以下(仍然不起作用,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();
        }));
    });
});    

最佳答案

正如 @EduardGamonal 在他的评论中提到的,您需要调用 $httpBackend.flush(),但您应该在发出 http 请求之后调用它,即在xService.getXData()之后;否则,将没有未完成的 http 请求需要处理,因此 $httpBackend 会给您“没有待刷新的请求”错误。

关于angularjs - 如何使用 httpBackend 测试 angularJS 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092816/

相关文章:

javascript - Angular 隔离范围的 & 绑定(bind)返回 getter 函数而不是值

testing - 您的测试数据应该与实时数据采用相同的形式吗?

django - 将固定装置与 pytest : How to share fixtures and use their parameters in different functions 一起使用

testing - 如何测试go中函数的返回值是指向类型的指针?

Java - 并发/阻塞队列单元测试策略

php - ng click 不适用于 jquery append/how to directive dynamic tags

javascript - AngularJS 和 jQuery/Angular Bootstrap 的内存泄漏

javascript - 如何将第一个和第三个字母大写?

javascript - Angular Js Bootstrap Navbar 滚动问题

使用 mockito 进行 GWT 测试