gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:06:22 25 4
gpt4 key购买 nike

我对 angularJS 很陌生。尝试使用 httpBackend 测试 angular.service 但无法使其正常工作。我究竟做错了什么?在 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();
}));
});
});

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com