测试服务的调用$ HTTP与$ httpBackend
问题描述:
我有一个宁静的API的AngularJS服务:
angular
.module('app', [
])
.service('api', ['$http', '$q', function APIService($http, $q) {
this.get = function (dataProperty, params) {
return $http({
method: 'get',
url: 'https://some.api/rest/',
params: angular.extend({
default_params...
}, params)
})
.then(
function (result) {
if (result.data.status === 'ok') {
return result.data[dataProperty];
} else {
return $q.reject(angular.extend(new Error(result.data.message), { result: result.data }));
}
},
function (reason) {
return $q.reject(angular.extend(new Error('AJAX request to the API failed'), { reason: reason.data }));
});
};
}]);
我试图测试这个api.get下列要求:
describe('api', function() {
var
$httpBackend,
service;
beforeEach(module('app'));
beforeEach(inject(function (_$httpBackend_, _api_) {
$httpBackend = _$httpBackend_;
service = _api_;
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('', function() {
$httpBackend
.when('get', 'https://some.api/rest/')
.respond({
data: {
status: 'ok'
}
});
service.get('status', {});
$httpBackend.flush();
$httpBackend
.expect('get', 'https://some.api/rest/');
});
});
Error: AJAX request to the API failed in bower_components/angular-mocks/angular-mocks.js (line 279)
我要对正确设置测试:
但我每次得到错误回调?我相信.when
和.response
用于伪造实际的$ http调用,但我无法获得成功回调触发。
答
的两个问题是.when
不是在寻找正确的URL(因为得到PARAMS被扔在我需要使它成为一个正则表达式:
.when('GET', /https:\/\/api\.flickr\.com\/services\/rest\/.*/)
然后,.respond
并不需要用被填充数据对象,它对于你:
.respond({ stat: 'ok' });
你有data.stat和data.status - 应该是相同的 –
也有是在代码中使用递延毫无意义 - 它可以简化 –
?是。 ,他们应该是两个数据。状态。在我的代码中是正确的,当我简化为SO时,我刚才介绍了这个错字。 – Dave