AngularJS假$ httpBackend.whenPOST()Uncaught TypeError:无法读取未定义的属性'2'

时间:2013-01-10 12:47:25

标签: angularjs

对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/的角度小提琴) )

之前是否有人遇到此问题或对如何攻击此事有任何想法?

我已经搜索了相当广泛的解决方案/相关帖子但找不到任何内容,所以任何指针都会非常感激。

非常感谢。

1 个答案:

答案 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, {}];
});