Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用$http get测试angular服务的repsonse_Javascript_Unit Testing_Angularjs_Jasmine - Fatal编程技术网

Javascript 使用$http get测试angular服务的repsonse

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

我对AngularJS和测试非常陌生,所以我尝试测试我在AngularJS中提供的服务

我已经设置了这样的服务

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_;
}));