2016-09-08 25 views
0

私は1.5の角度で開発されたページを持っていますが、初期API呼び出し中に読み込みの進行状況を示しています。私は変数this.loadedを使用してロードの進行状況を処理しています。最初はthis.loaded = falseであり、すべてがロードされるとthis.loaded =trueになりますが、テストケースを書き込むときには真のです。テストケースが変数の最終値をチェックしているので、this.loadedです。どのように私は、流れを遅くすることができます進行状況を確認するトリガされているか、ジャスミンテストを使用していない?進捗状況のテストケース - Jasmine

HTML:

<loading-directive is-loaded='$ctrl.loaded'> 
    DOM to show after loaded 
</loading-directive> 

JS:

function componentCtrl (someFactory) { 
    var _this = this; 
    _this.loaded = false; 

    someFactory.someMethod().then(function() { 
     _this.loaded = false; 
    }); 
} 

私は、コールが起こる前に、偽= _this.loadedを確認したいです。

+0

あなたが作成しているように私には思えると仮定しているものは何でもbeforeEachメソッドのロードをトリガーします。テストブロック(これ)に移動することを検討する必要があるかもしれません。あなたのコードを共有できますか? –

+0

@ PedroVaz、いくつかのコードを更新しました –

答えて

0

ファクトリコールの前に_this.loadedの値をチェックすることはできません。あなたがそれを実現するためにできることは、_this.loadedを変更しない方法でファクトリコールをモックすることです。それでもそれを確認することはできません。私はあなたに洞察を与えるかもしれない例を作成します。

describe('MyController Spec', function() { 

    // Load module 
    beforeEach(angular.mock.module('myApp')); 

    it('Check if loaded is false if factory call does not change its value', inject(function($controller) { 
     //setup 
     spyOn(someFactory, 'someMethod').and.callFake(function() { 
       //create a promise mock that will not execute the code that 
       //changes _this.loaded 
       var uselessPromiseMock = { 
         then: function() {} 
       }; 
       return uselessPromiseMock; 
     }); 

     //action 
     var myController = $controller("componentCtrl"); 

     //assert 
     expect(myController.loaded).toBeFalsy(); 
    })); 

    it('Check if loaded is true after a normal controller initialization', inject(function($controller) { 
     //action 
     var myController = $controller("componentCtrl"); 

     //assert 
     expect(myController.loaded).toBeTruthy(); 
    })); 

}); 

PS:私はそれが役に立てば幸い私はあなたが誤って入力し、あなたがtrueに_this.loaded工場コールの変化に渡すコールバックが:)

関連する問題