繁体   English   中英

在我的情况下,如何测试http请求?

[英]How to test an http request in my case?

我有这样的服务。

只需发出http get请求即可。

angular.module('myApp').service('TESTService', ['$http',
    function($http) {
        var request = function(url) {
            return $http({
                method: 'GET',
                url: url
            });
        };
        return {
            get: function(url) {
                return request(url);
            }            
        };
    }
]);

在我的控制器内,我已致电该服务

 TESTService.get('/api/product' + id).success(
            function(result) {
                console.log(result)
            }
        );

我需要为此编写单元测试

describe('test here', function () {
var testCtrl, scope, httpBackend, testService;

// Initialize the controller and a mock scope
beforeEach(inject(function (_$controller_, _$rootScope_, _$httpBackend_,  _TESTService_) {
    scope = _$rootScope_.$new();
    httpBackend = _$httpBackend_;
    testService = _TESTService_;

    testCtrl = _$controller_('testCtrl', {
        $scope: scope
    });



     it('should return http data', function() {
        var productData = {
           data: [
                {
                  obj: {
                    id:'123'
                  }
                }           
            ]
        }

        httpBackend.expectGET('/api/product/' + id).respond(productData);

        TESTService.get('/api/product/' + id).
            then(function(data) {
                var result = data;
            })

        httpBackend.flush();
        expect(result).toEqual(productData)
    });
 }));

完成测试后,我得到了

Error: Unexpected request: GET /api/product/undefined

如何编写测试以确保其通过? 有任何想法吗? 非常感谢!

您的变量“ id”似乎未定义。 如果你扔

var id = 123; 

在此行之前:

httpBackend.expectGET('/api/product/' + id).respond(productData);

它会改为调用/ api / product / 123。

所以也许您首先是在寻找这个:

 httpBackend.expectGET('/api/product/' + productData.data[0].obj.id).respond(productData);

 TESTService.get('/api/product/' + productData.data[0].obj.id).

等等,希望对您有所帮助!

尝试在传递到$ http的对象周围加上单引号,即$ http({method:'GET', 'url' ,url});

angular.module('myApp').service('TESTService', ['$http',
    function($http) {
        var request = function(url) {
            return $http({
                method: 'GET',
                'url': url
            });
        };
        return {
            get: function(url) {
                return request(url);
            }            
        };
    }
]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM