2016-11-23 18 views
1

私の角型アプリケーションにJasmineを使ってテストを書いています。すべてのテストは合格です。Jasmine:約束を返す関数をテストする

class xyz implements ng.IComponentController { 
    private myList: ng.IPromise<MyList[]> ; 
    //declare necessary variables 
    /* @ngInject */ 
    constructor(private ListService: ListService, 
      ) { 
    this.myList = this.ListService.getList(); 
    } 

    public onChange(): void { 
    this.isNameUnique(this.name).then(function(unique){ 
     scope.isUnique = unique; 
     scope.errorNameInput = !reg.test(scope.name) || !scope.isUnique; 
     scope.myFunction({ 
     //do something 
     }); 
    }); 
    } 

    public isNameUnique(name: string): ng.IPromise<boolean> { 
    return this.myList 
    .then(
     (names) => { 
     _.mapValues(names, function(name){ 
      return name.uuid.toLowerCase(); 
     }); 
     return (_.findIndex(names, { uuid : uuid.toLowerCase() }) === -1) ? true : false; 
    }); 
    } 
} 

をここで、私は、コンストラクタ自体で事前移入私のリストにListServiceを使用しています(それは一度だけサービスを呼び出します):私のクラスには、次のようになります。次に、onChangeメソッドで、名前が一意であるかどうかを確認しています( )。 isNameUniqueはブール値の約束を返しています。 今、私はテストのために100%のカバレッジを取得しようとしています。私はここでisNameUniqueメソッドをテストすることについて混乱している。

私はこのテストが行​​をカバーするために期待される

this.$scope.myFunction = jasmine.createSpy('myFunction'); 
    it('should ...', function() { 
     this.view.find(NAME_INPUT).val('blue').change(); // my view element. 
     this.getList.resolve(myList); 
     this.controller.isNameUnique('blue').then(function (unique) { 
     expect(unique).toEqual(false); //since blue is already in my json 
     expect(this.controller.errorNameInput).toEqual(true); //since its not unique, errornameinput will be set to true 
     expect(this.$scope.myFunction).toHaveBeenCalled(); 
     }); 
    }); 

(と仮定します。myListは私がサービスから取得します応答に似てJSONである)::私の最初のテストはあるmyFunction()scope.errorNameInput = !reg.test(scope.name) || !scope.isUniqueと呼び出しを、それはまだショーカバーされていない。理由は分かりません。

Angular and Jasmineが初めてのので、何か間違っているとわかりましたら教えてください。ありがとう。

答えて

0

$scope.$digest()に電話すると、テストであなたの約束を解決する必要があります。これについて詳しく解説する便利なチュートリアルがあります。here

+1

私は約束がすでに解決していると思っていたので、それが私に唯一の正しい結果を与え、テストが合格になったのです。私はこれを読んでみましょう。ありがとう。 –

+0

あなたの約束解決の理論をテストするのは簡単です。 'then()'の中で 'console.log()'をちょっとして、あなたのテストでヒットしたかどうかを確認してください:) –

+0

ここでは、 1.x(同じ原則が適用されます):http://www.bradoncode.com/blog/2015/07/13/unit-test-promises-angualrjs-q/ –

関連する問題