2016-05-03 10 views
1

lesen Ich versuche, eine http-GET-Anfrage Erwartung über Jasmin einzurichten, aber ich bin immer folgende Fehlermeldung:

TypeError: Cannot read property 'user' of undefined 

Die Servicefunktion Ich möchte Aussehen testen wie:

function getData() { 
    return $http.get('http://example.com/data') 
     .then(function (response) { 
      return response.data.example.user; 
     }); 
} 

A GET-Anfrage an die URL "http://example.com/data" liefert folgende Daten:

{ 
    "id": "1", 
    "example": { 
    "user": [ 
     { 
      "name": "John", 
      "wife": [ 
      { 
       "name": "Jane", 
       "age": "27" 
      } 
      ] 
     } 
    } 
} 

Der entsprechende Test sieht wie folgt aus:

describe("Service: myService", function() { 
    beforeEach(module("myApp")); 

    var myService, $httpBackend; 

    beforeEach(inject(function (_myService_, _$httpBackend_) { 
     myService = _myService_; 
     $httpBackend = _$httpBackend_; 

     $httpBackend.whenGET("http://example.com/data").respond("some data"); 
    })); 

    afterEach(function() { 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 

    it("should call the correct URL", function() { 
     $httpBackend.expectGET("http://example.com/data"); 
     myService.getData(); 
     $httpBackend.flush(); 
    }); 

Irgendwie bin ich nicht in der Lage eine http-GET-Anfrage, sobald die Servicefunktion zu testen (die ich testen wollen) gibt eine verschachtelte JSON-Eigenschaft anstelle des gesamten JSON.

Vielen Dank im Voraus!

+0

Sie benötigen gültige Json –

Antwort

2

Daten, die durch API geantwortet werden, sollten Scheindaten im korrekten Format sein, hier wird getData Methode im Objektformat erwartet, damit Benutzer davon zurückgeben konnte. wie response.data.example.user

-Code

$httpBackend.whenGET("http://example.com/data").respond({ 
    "id": "1", 
    "example": { 
    "user": [] //to keep you code working 
    } 
}) 
+0

Danke. Aber was ist, wenn die Mock-Daten ziemlich lang sind und die test.js mehrere http-Anforderungs-Tests mit verschiedenen Mock-Daten enthält (nehmen wir an, dass alle von ihnen wie folgt groß sind: http://www.sitepoint.com/youtube-json) -Beispiel/)? Soll ich den Mock in eine separate JSON-Datei übertragen, um die Testdatei nicht mit Tausenden von Scheindatenzeilen zu überfüllen? –

+0

Ja. Du könntest ... sonst könnte ypu diese Daten in einer separaten JavaScript-Datei verwalten. –

Verwandte Themen