2016-07-05 5 views
0

私は、角で、単位テストで新しいです。私たちは、データベースのCRUD操作のためにODATA使用しているので、私たちはそのためのサービスを作成して、次のようになります。odata約束のジャスミンユニットテスト

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(); 
    } 

コードは私の質問のための抽象化ビットである、そうしてください不思議はありません。私は今すぐfunction createObj()ユニットテストをしたいが、これはうまくいきません。私は角度のクラスを取って、私たちは$rootScope.digest()を使用する必要がありますが、私の場合には動作していないよう約束「を実行」のことをそこに学んだ:

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); 
    })); 

私は、変数のテストの設定を追加しましたたとえばthenパスが実行されたときに参照してください。でも、$rootScope.$digestを指定しても、そのパスに入ることはありません。私の変数testは決して 'abc'から別のものに変更されることはありません。

私は何を間違っているのかをヒントに教えてください。

+0

[方法angularjsでユニットテストの$ HTTPをするとジャスミン]の可能な重複(http://stackoverflow.com/questions/31108273/how-to-unit-test- http-in-angularjs-and-jasmine) –

+0

この2つのリンクは役に立ちます: http://ng-learn.org/2014/08/Testing_Promises_with_Jasmine/ http://ng-learn.org/2014/08/ Testing_Promises_with_Jasmine_Provide_Spy/ –

答えて

1

Jasmine 2.0のdoneフィーチャーを使用するようにコードを更新しようとしました。 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

ありがとう、私はそれを試してみます。 – Lehmli