2016-07-05 6 views
0

Ich bin neu bei eckigen und bei Unit-Tests mit eckigen. Wir verwenden für die Datenbank CRUD Aktionen OData, also haben wir ein Service für das geschaffen, der wie folgt aussieht:Jasmine Unit Tests mit Odata Versprechen

function DatabaseService($http, $odataresource, DateFactory, constants) { 

    var url = constants.BACKEND.URL; 
    var ObjCreate = $odataresource(url + 'Objects/Function.CreateObject', {}, {}, {}); 

    var service = { 
     createSomething: { 
      createObj: createObj 
     }}; 

    return service; 

    function createObj(formData) { 
     var myObj = new ObjCreate(); 
     mapData(formData, myObj); 
     return myObj.$save(); 
    } 

Der Code ein bisschen für meine Frage abstrahiert ist, so frage mich, bitte nicht. Ich möchte nun die function createObj() Einheit testen, was nicht funktioniert. Ich nahm eine Winkelklasse und wir lernten dort, dass für ‚ausführen‘ Versprechen, die wir $rootScope.digest() verwenden, aber es scheint nicht, in meinem Fall zu arbeiten:

describe('createObj', function() { 

    it('should return data', inject(function ($rootScope) { 

     var DatabaseService = $injector.get('DatabaseService', { $odataresource: $odataresource }); 

     var formDataMock = { 
      productName: "Produktname" 
     }; 

     var test = 'abc'; 

     DatabaseService.createSomething.createObj(formDataMock) 
      .then(function (data) { 
       test = data; 
      }) 
      .catch(function (error) { 
       test = error; 
      }); 

     $rootScope.$digest(); 

     console.log(test); 
    })); 

ich die Einstellung des variablen Tests hinzugefügt habe sehen Sie, wenn zum Beispiel der dann Pfad ausgeführt wird, aber selbst mit der $rootScope.$digest wird es nie in den dann Pfad gehen, mein Variablentest wird nie von 'abc' zu etwas anderem wechseln.

Könnten Sie mir bitte einen Tipp geben, was mache ich falsch?

+0

Mögliches Duplikat von [Wie test $ http Einheit in AngularJS und Jasmin] (http://stackoverflow.com/questions/31108273/how-to-unit-test- http-in-AngularJS-and-Jasmin) –

+0

Vielleicht zwei Links sind hilfreich: http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine/ http://ng-learn.org/2014/08/ Testing_Promises_with_Jasmine_Provide_Spy/ –

Antwort

1

Ich habe versucht, den Code zu aktualisieren, die getan Eigenschaft von Jasmin 2.0 zu verwenden. http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine/

describe('createObj', function() { 
 

 
    it('should return data', function (done) { 
 

 
     var DatabaseService = $injector.get('DatabaseService', { $odataresource: $odataresource }); 
 

 
     var formDataMock = { 
 
      productName: "Produktname" 
 
     }; 
 

 
     var test = 'abc'; 
 

 
     DatabaseService.createSomething.createObj(formDataMock) 
 
      .then(function (data) { 
 
       test = data; 
 
      }) 
 
      .catch(function (error) { 
 
       test = error; 
 
      }) 
 
\t \t .finally(done);; 
 

 
     console.log(test); 
 
    });

+0

Danke, ich werde es versuchen. – Lehmli

Verwandte Themen