[英]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.