AngularJS fake $httpBackend.whenPOST() Uncaught TypeError: Cannot read property '2' undefined
Ziemlich neu in AngularJS und bekam ein mock $httpBackend zu arbeiten, wie beschrieben in der Doku (siehe hier:http://docs.angularjs.org/api/ngMockE2E.$httpBackend). Ich reproduzieren können, den GET-code z.B.:
$httpBackend.whenGET('/phones').respond(phones);
Der POST Methode, jedoch schlägt mit einer angular-mocks.js Fehler. Dies ist, was ich angeben geschehen auf POST:
$httpBackend.whenPOST('/phones').respond(function(method,url,data){
console.log(data);
phones.push(angular.fromJson(data));
});
Dies ist, wie rufe ich die POST aus dem controller:
var newPhone = {name:'New Phone'};
$http.post('/forecasts/types.json', newPhone);
Und das ist, was ich sehe in der Konsole in der Antwort:
{"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
Mein code sieht so ziemlich das gleiche wie die docs. Die Funktion wird aufgerufen, wenn Gebucht, aber ich kann nicht herausfinden, warum es nicht laufen.
Bearbeiten (Dank an Josh David Müller für seinen Kommentar re ein Turnschuh) Hier ist ein Turnschuh, das den Fehler reproduziert: http://jsfiddle.net/elcabo/btbds/3/
Die Geige ist anhand des Beispiels in den Winkel-docs (http://docs.angularjs.org/api/ngMockE2E.$httpBackend) und die Winkel-Geige für mockE2E $httpBackend (http://jsfiddle.net/vojtajina/DQHdk/)
Hat jemand erlebt oder eine Idee, wie wir angreifen?
Ich gesucht habe ziemlich große, die für eine Lösung relevanten Beiträge, kann aber keine finden, so dass alle Zeiger wäre sehr dankbar.
Vielen Dank.
- Können Sie nach dem code, dass der Fehler auf Plunker oder jsFiddle so können wir basteln?
- Dank Josh. Sollte ich gepostet haben, eine Fiedel, wenn ich die Frage gepostet. Mein schlechtes. Arbeiten Sie zu wenig schlafen. Ich habe reproduziert den Fehler in einem fiddle und bearbeitet meine Frage gehören.
- Ich werde werfen Sie einen Blick auf die Geige, aber das erste, was mir aufgefallen ist, dass Sie verwenden eine version von Angular, die ist wirklich veraltet (0.10.6 vs 1.0.x). Ist das absichtlich, oder kann ich es aktualisieren auf die neueste version?
- Gold! Dank Josh. Die version von angular in die Fiedel wurde übernommen von den docs' Geige, die ich abgespalten. Mein Projekt verwendet ein v1.0.3, die ich installiert mit yeoman. Es funktioniert nun mit Ihren änderungen. So einfach. Gah. Ich wirklich schätzen Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich aktualisiert Ihre jsFiddle, die funktioniert jetzt: http://jsfiddle.net/joshdmiller/EgMpe/.
Ersten, die version von AngularJS war außerordentlich alt. Ich aktualisiert es von 0.10.6 auf 1.0.3. Mit dieser änderung kamen viele syntaktische änderungen, die Sie hier finden können in der Geige.
Aber das Problem, das Sie hatten, war aus-nicht wieder einen Wert in Ihrem
$httpBackend.whenPOST
Methode. Dierespond
Methode erwartet einen Wert zurück, der angibt, status, response-body und-Header. Das ausführliche Beispiel, das ich einbezogen in die arbeiten fiddle ist:Array zurückgegeben wird, eine response-status
200
ist, wird eine leere Antwort Körper, und ein leeres set-Header (also die Standardwerte).Habe ich auch noch einen
whenGET
so können Sie sehen, wie Sie arbeiten zusammen:Main
controller angewendet wird, in der Sie Ihre Geige? Ich sehe nichtng-controller
oder.controller()
überall-ist es der Besondere Fall, dass eine top-level-Funktion mit dem NamenMain
wird automatisch injiziert und verwendet?ngController
Richtlinie sitzt.