8

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

我的代码看起来与文档几乎相同。该函数在发布到时被调用,但我不知道为什么它不会运行。

编辑(感谢 Josh David Miller 对小提琴的评论)这是一个重现错误的小提琴:http: //jsfiddle.net/elcabo/btbds/3/ 小提琴基于 Angular 文档中的示例(http ://docs.angularjs.org/api/ngMockE2E.$httpBackend)和 mockE2E $httpBackend 的角小提琴(http://jsfiddle.net/vojtajina/DQHdk/)

有没有人遇到过这个问题或者对如何攻击这个有任何想法?

我已经搜索了相当广泛的解决方案/相关帖子,但找不到任何内容,因此将不胜感激任何指针。

非常感谢。

4

1 回答 1

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, {}];
});
于 2013-01-11T23:09:18.660 回答