Angularjs 为什么$httpBackend没有响应?

Angularjs 为什么$httpBackend没有响应?,angularjs,mocking,jasmine,httpbackend,Angularjs,Mocking,Jasmine,Httpbackend,我在学习使用Karma对一些AngularJS代码进行单元测试时遇到了困难,我对$httpBackend的使用很感兴趣。我已经创建了一个测试的抽象版本,只显示了我模拟get请求的位置,并希望看到对httpBackend.get(…)的调用没有失败 description('Basics',function(){ var-httpBackend; beforeach(angular.mock.inject)(函数($httpBackend){ httpBackend=$httpBackend; h

我在学习使用Karma对一些AngularJS代码进行单元测试时遇到了困难,我对$httpBackend的使用很感兴趣。我已经创建了一个测试的抽象版本,只显示了我模拟get请求的位置,并希望看到对
httpBackend.get(…)
的调用没有失败

description('Basics',function(){
var-httpBackend;
beforeach(angular.mock.inject)(函数($httpBackend){
httpBackend=$httpBackend;
httpBackend.when(“GET”,“/foo.json”).respond(“{”name\“:\”value\“}”);
}));
它('应完成此任务',函数(){
log(httpBackend);
var getFoo=httpBackend.get(“/foo.json”);//第11行
httpBackend.flush();
});
});
11号线出故障了。以下是我在日志中看到的内容

LOG: function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { ... }
Chrome 36.0.1985 (Mac OS X 10.9.4) Basics should complete this task FAILED
    TypeError: undefined is not a function
        at null.<anonymous> (/path/to/app/main/httptest.js:11:30)
Chrome 36.0.1985 (Mac OS X 10.9.4): Executed 1 of 1 (1 FAILED) ERROR (0.023 secs / 0.021 secs)

就$httpBackend的文档所述,您不能使用名为“get”的方法。 “get”仅在使用$http时有效

您应该改为使用“expectGet”


我理解$httpBackend是对$http的模拟。当调用$http.get时,它实际上应该在幕后调用$httpBackend.get,不是吗?你说得对。我误解了$http和$httpBackend之间的关系。
describe('Basics', function() {
    var httpBackend;
    var http;

    beforeEach(angular.mock.inject(function($httpBackend, $http) {
        httpBackend = $httpBackend;
        http = $http;
        httpBackend.when("GET", "/foo.json").respond("{\"name\":\"value\"}");
    }));

    it('should complete this task', function() {
        console.log(httpBackend);
        var getFoo=http.get("/foo.json") // line 11
            .success(function(data) {})
            .error(function() {});
        httpBackend.flush();
    })
});
httpBackend.expectGET('/foo.json');