我对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();
}));
});
});
答案 0 :(得分:3)
正如@EduardGamonal在评论中提到的那样,您需要致电$httpBackend.flush()
,但是在发出http请求之后,您应该将其称为,即xService.getXData()
之后;否则,将没有未完成的http请求处理,因此$ httpBackend将为您提供"没有待处理的刷新请求#34;错误。