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

私のコードはドキュメントとほとんど同じように見えます。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/)

誰かが以前にこれに遭遇したことがありますか、またはこれを攻撃する方法について何かアイデアがありますか?

私は解決策/関連する投稿をかなり広く検索しましたが、何も見つかりませんでしたので、どんなポインタでも大歓迎です。

どうもありがとう。

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 に答える