AngularJS 的新手,并获得了一个模拟 $httpBackend,如文档中所述(参见此处:http://docs.angularjs.org/api/ngMockE2E.$httpBackend)。我可以重现 GET 代码,例如:
$httpBackend.whenGET('/phones').respond(phones);
但是,POST 方法失败并出现 angular-mocks.js 错误。这是我指定在 POST 上发生的事情:
$httpBackend.whenPOST('/phones').respond(function(method,url,data){
console.log(data);
phones.push(angular.fromJson(data));
});
这就是我从 Controller 调用 POST 的方式:
var newPhone = {name:'New Phone'};
$http.post('/forecasts/types.json', newPhone);
这就是我在控制台中看到的响应:
{"name":"New Phone"} app.js:167
Uncaught TypeError: Cannot read property '2' of undefined angular-mocks.js:876
(anonymous function) angular-mocks.js:876
completeOutstandingRequest angular.js:2930
(anonymous function) angular.js:3209
我的代码看起来与文档几乎相同。该函数在发布时被调用,但我不知道为什么它不会运行。
编辑(感谢 Josh David Miller 对 fiddle 的评论)这是一个重现错误的 fiddle :http://jsfiddle.net/elcabo/btbds/3/
fiddle 基于 Angular 文档 (http://docs.angularjs.org/api/ngMockE2E.$httpBackend) 和 mockE2E $httpBackend 的 Angular fiddle (http://jsfiddle.net/vojtajina/DQHdk/)
有没有人以前遇到过这个问题,或者对如何解决这个问题有任何想法?
我已经广泛搜索了解决方案/相关帖子,但找不到任何内容,因此将不胜感激。
非常感谢。
最佳答案
我更新了你的 jsFiddle,现在可以使用了:http://jsfiddle.net/joshdmiller/EgMpe/ .
首先,AngularJS 的版本非常旧。我将它从 0.10.6 更新到 1.0.3。伴随这种变化而来的是许多句法变化,你可以在 fiddle 中找到。
但是您遇到的问题是没有在您的 $httpBackend.whenPOST
中返回值。方法。 respond
方法应返回一个指示状态、响应正文和 header 的值。我在工作 fiddle 中包含的详细示例是:
$httpBackend.whenPOST('/phones').respond(function(method, url, data, headers){
console.log('Received these data:', method, url, data, headers);
phones.push(angular.fromJson(data));
return [200, {}, {}];
});
返回的数组是
200
的响应状态,一个空的响应主体和一组空的 header (即使用默认值)。我还添加了一个
whenGET
所以你可以看到他们一起工作:$httpBackend.whenGET('/phones').respond(function(method,url,data) {
console.log("Getting phones");
return [200, phones, {}];
});
关于AngularJS 假 $httpBackend.whenPOST() 未捕获类型错误 : Cannot read property '2' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258302/