2016-03-24 11 views
0

私はプログラミングの初心者で、私はジャスミンでangularJSコードをテストする方法を理解しようとしています。ジャスミンでのAngularJSテスト

これはテストしようとしている角度コードです。abpBoilerplateと角度を使用してasp.net Webアプリケーションですべて設定されています。以下のコードの結果、Webページ上でボタンをクリックすると、「成功」ポップアップが表示され、サービスが利用可能であれば、「true」がテキストボックスに表示されます。このサービスは、Web APIプロジェクト内のクラスから取得されています。

(function() { 
    var controllerId = 'app.views.home'; 
    angular.module('app').controller(controllerId, [ 
     '$scope', 'abp.services.lfcservice.webapi', function($scope,lfcServices) { 
      var vm = this; 

      //Home logic... 

      vm.CheckLfcIsAvailable = function() { 
       lfcServices.lfcIsAvailable() 
        .success(function() { 
         abp.notify.info('Success'); 
         vm.Available = 'True'; 
        }); 
       }; 

lfcサービスの真の値を期待するときに通過するジャスミンテストを書く方法を知るだけでいいです。私は成功していないさまざまな組み合わせの負荷を試した、私はここにいたアイブが10の異なる試行で貼り付けることができますが、それらはすべて非常に異なっています。

ご協力いただければ幸いです。

答えて

0

まず、コントローラをテストしてサービスを模擬する方法を知る必要があります。 次に、約束を返すためにサービスAPIをモックする必要があります。

コントローラーがAvailable = false;で開始されたとします。

テストの角1.1コントローラjsFiddleを参照してください):

describe("app.views.home controller spec", function() { 
    var ctrl; 
    //depend on the module 
    beforeEach(module('app')); 

    beforeEach(inject(function($controller) { 
     //use angular's "$controller" to get the controller 
     ctrl = $controller("app.views.home"); 
    })); 

    it("available should be false", function() { 
     expect(ctrl.Available).toBe(false); 
    }); 
}); 

それでは、サービスは、(約束なし)簡単な結果を返すことasume、我々は代わりにモックサービスを提供しない方法を見てみましょう実際のサービスの

テストモックサービスとの角度1.xのコントローラ(jsFiddleを参照してください):

beforeEach(module(function($provide) { 
    var mockService = jasmine.createSpyObj('mock', ['lfcIsAvailable']); 
    mockService.lfcIsAvailable.and.returnValue(true); 
    $provide.value('abp.services.lfcservice.webapi', mockService); 
})); 

それでは、約束の応答を模擬する方法を見てみましょう。このためには$qを使用します。

モック角度1.xの約束jsFiddleを参照してください):

it('should change after promise resolved', inject(function($q, $rootScope) { 
    //create promise 
    var deferred = $q.defer(); 

    //mock service response 
    mockService.lfcIsAvailable.and.returnValue(deferred.promise); 

    //call CheckLfcIsAvailable() 
    ctrl.CheckLfcIsAvailable(); 

    expect(ctrl.Available).toBe(false); 

    deferred.resolve(true); 

    //not yet... 
    expect(ctrl.Available).toBeNull(false); 

    //from angular $q documentation: 
    //"it's important to know that the resolution of promises is tied to the digest cycle" 
    $rootScope.$apply(); 

    //now! 
    expect(ctrl.Available).toBe(true); 

})); 
関連する問題