Javascript 使用$http get测试angular服务的repsonse
我对AngularJS和测试非常陌生,所以我尝试测试我在AngularJS中提供的服务 我已经设置了这样的服务Javascript 使用$http get测试angular服务的repsonse,javascript,unit-testing,angularjs,jasmine,Javascript,Unit Testing,Angularjs,Jasmine,我对AngularJS和测试非常陌生,所以我尝试测试我在AngularJS中提供的服务 我已经设置了这样的服务 var serviceModule = angular.module('App.services', []); serviceModule.factory('subscribeService', function ($http) { return { getNumberOfSubscribers : function() { return
var serviceModule = angular.module('App.services', []);
serviceModule.factory('subscribeService', function ($http) {
return {
getNumberOfSubscribers : function() {
return $http.get('/jsonFiles/subscribers.json')
.then(function(subscribers) {
return subscribers.length;
});
}
};
});
测试是这样的
describe('Subscribe service test', function() {
var httpBackend,
subscribeServiceMock,
subscribers;
subscribers = [{"email": "test1@mail.com", "subscriptions": "A,B,C"},
{"email": "test2@mail.com", "subscriptions": "A,C,D"},
{"email": "test3@mail.com", "subscriptions": "B,C,F"}];
beforeEach(module('App.services'));
beforeEach(inject(function(subscribeService){
subscribeServiceMock = subscribeService;
}));
it('Should return total numbers of subsribers', inject(function ($httpBackend) {
$httpBackend.whenGET('/jsonFiles/subscribers.json').respond(subscribers);
var numberOfSubscribers = subscribeServiceMock.getNumberOfSubscribers();
$httpBackend.flush();
expect(numberOfSubscribers).toEqual(3);
}));
测试将因此错误而失败:
“订阅服务测试应返回失败的订阅服务器总数”
“预期{then:Function}等于3”
我想知道我哪里弄错了?您是否尝试注入您的httpBackend?在您的“每次之前”通话中尝试以下内容: 更新 正如我在这里发现的:
这两种“注入方法”似乎实际上有区别。在每次测试之前注入它或在测试中注入它本身有什么区别吗?唯一的区别是,在测试中,每个“It”子句调用一次beforeach。。。如果您有6个测试用例,您可以在每次之前编写一次,并让它为所有测试用例运行,但我已经在测试中注入了httpBackend。不应该有什么不同你是对的,这不会有什么不同。我第一次读你的问题时似乎没有注意到,对不起。看看这是否能帮助您:
beforeEach(inject(function(subscribeService, _$controller_, _$rootScope_, _$httpBackend_){
subscribeServiceMock = subscribeService;
$scope = _$rootScope_.$new();
$controller = _$controller_('MyCtrl', { $scope: $scope });
$httpBackend = _$httpBackend_;
}));