对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));
});
这是我从控制器调用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
我的代码看起来与文档几乎相同。在POST到时调用该函数,但我无法弄清楚为什么它不会运行。
编辑(感谢Josh David Miller的评论是一个小提琴)这是一个重现错误的小提琴:http://jsfiddle.net/elcabo/btbds/3/ 小提琴基于Angular文档(http://docs.angularjs.org/api/ngMockE2E.$httpBackend)中的示例和mockE2E $ httpBackend(http://jsfiddle.net/vojtajina/DQHdk/的角度小提琴) )
之前是否有人遇到此问题或对如何攻击此事有任何想法?
我已经搜索了相当广泛的解决方案/相关帖子但找不到任何内容,所以任何指针都会非常感激。
非常感谢。
答案 0 :(得分:14)
我更新了你的jsFiddle,它现在有效:http://jsfiddle.net/joshdmiller/EgMpe/。
首先,AngularJS的版本非常古老。我将其从0.10.6更新为1.0.3。随着这种变化出现了许多语法上的变化,你可以在小提琴中找到它们。
但您遇到的问题是未在$httpBackend.whenPOST
方法中返回值。 respond
方法应返回一个指示状态,响应正文和标题的值。我在工作小提琴中包含的冗长例子是:
$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
,空响应主体和空标题集(即使用默认值)。
我还添加了whenGET
,以便您可以看到它们一起工作:
$httpBackend.whenGET('/phones').respond(function(method,url,data) {
console.log("Getting phones");
return [200, phones, {}];
});