Testing Jasmine测试AngularJS$http

Testing Jasmine测试AngularJS$http,testing,angularjs,jasmine,Testing,Angularjs,Jasmine,我正在尝试使用Jasmine异步测试测试包装在AngularJS服务中的RESTAPI。我知道,我应该,现在也应该,在服务器上运行API测试,并使用mock$httpBackend来测试服务,但我仍然想知道如何在需要的地方进行异步测试 我遇到的问题是我的延迟(由$http返回)似乎从未解决。越过服务并尝试简单地使用$http也有同样的问题。我在这里做错了什么: describe('Jasmine + Angular + $http', function() { var injector

我正在尝试使用Jasmine异步测试测试包装在AngularJS服务中的RESTAPI。我知道,我应该,现在也应该,在服务器上运行API测试,并使用mock$httpBackend来测试服务,但我仍然想知道如何在需要的地方进行异步测试

我遇到的问题是我的延迟(由$http返回)似乎从未解决。越过服务并尝试简单地使用$http也有同样的问题。我在这里做错了什么:

describe('Jasmine + Angular + $http', function() {

    var injector; 

    beforeEach(function() {
        injector = angular.injector(['ng']);
    });

    it('can be tested', function() {

        injector.invoke(function($http) {

            var complete = false;

            runs(function() {
                $http.get('...').then(function(res) {
                    complete = true;
                });
            });

            waitsFor(function() {
                return complete;
            }, 'query to complete', 5000);

            runs(function() {
                expect(complete).toEqual(true);
            });

        });

    });

});

(我正在使用grunt contrib jasmine运行测试)

除非调用$httpBackend.flush(),否则HTTP请求不会激发


更多信息可在此处找到:

我想知道您的喷油器的全局设置是否不起作用。您可以尝试将其移动到beforeach块中,这样您就有了
var-injector
beforeach(函数(injector=angular.injector(['ng']));
我已经更新了将注入器构建到beforeach中的代码。注入器似乎正在工作。我得到了一个带有get函数的$http对象。问题似乎是它返回的延迟从未得到解决。如果我包括jQuery并将$http更改为$(使用jQuery的ajax方法)一切都很完美。这显然与angular以这种方式注入时的延迟对象处理有关。有什么原因使$http在上述情况下为空吗?这对您来说如何?您是否检查过这是否是CORS问题?