我很难学会使用Karma对一些AngularJS代码进行单元测试,并且正在被$httpBackend的使用所困扰。我已经创建了测试的精馏版本,只显示了我模拟get请求的位置,并期望看到对httpBackend.get(...)的不断调用。
describe('Basics', function() {
var httpBackend;
beforeEach(angular.mock.inject(function($httpBackend) {
httpBackend = $httpBackend;
httpBackend.when("GET", "/foo.json").respond("{\"name\":\"value\"}");
}));
it('should complete this task', function() {
console.log(httpBackend);
var getFoo = httpBackend.get("/foo.json"); // line 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当作是对$http的嘲弄,而它却不是。下面的代码成功。
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();
})
});发布于 2014-08-15 17:42:03
就$httpBackend的文档而言,您不能使用名为"get“的方法。只有在使用$http时才会使用"get“
您应该使用"expectGet“
httpBackend.expectGET('/foo.json');https://stackoverflow.com/questions/25331273
复制相似问题