2016-09-26 6 views
1

ユニットテストをテストするために約束リターンをあざけるを持ちます。ユニットテスト:私はEMITが約束コールバックで呼び出されるかどうかを確認したいのトラブル私のEMIT</p> <p>をテストするために、約束のリターンをあざけるを持つ:トラブル私のEMIT

は、これは私がテストだ私のコードです:

"use strict"; 

angular.module("app.directives") 
    .directive("modalFilter", ["filterValidationService", function(filterValidationService) { 
     return { 
      restrict: "E", 
      scope: {}, 
      templateUrl: "templates/components/modal-filter.html", 
      link: function(scope) { 
       let defaultFilter = {"size": {"to": 0, "from": 0}}; 

       scope.clearFilter = function() { 
        scope.filter = defaultFilter; 
       }; 

       //New - requires unit test 
       scope.updateTable = function() { 
        const tab = "availabilities"; 
        const isFilter = scope.filter === defaultFilter ? false : true; 

        filterValidationService.validateSize(scope.filter.size) 
         .then(filterObj => { 
          scope.$emit("filter:cardData", filterObj, tab, isFilter); 
         }); 
       }; 

       scope.clearFilter(); 
      } 
     }; 
}]); 

これは私のユニットテストです:

"use strict"; 

describe("modal filter component:", function() { 
    var element; 
    var scope; 
    var mockData = {"size": {"to": 0, "from": 0}}; 
    var mockFilteredData = {"size": {"to": 900, "from": 100}}; 
    var filterValidationService; 

    beforeEach(angular.mock.module("eg.insight.services")); 
    beforeEach(angular.mock.module("eg.insight.directives")); 

    beforeEach(inject(function ($compile, $injector, $q, $rootScope, filterValidationService) { 
     var deferred = $q.defer(); 
     scope = $rootScope.$new(); 
     scope.filter = mockData; 
     filterValidationService = filterValidationService; 

     element = "<modal-filter></modal-filter>"; 
     element = $compile(element)(scope); 

     angular.element(document.body).append(element); 

     scope.$digest(); 
     scope = element.isolateScope(); 

     sinon.spy(scope, "$emit"); 

     sinon.stub(filterValidationService, "validateSize").returns(deferred.promise); 
    })); 

    it("should emit for filtered data when updateTable is called", function() { 
     scope.updateTable(); 
     expect(scope.$emit.calledWith("filter:cardData", mockData.size, "availabilities", false)).toEqual(true); 
    }); 
}); 

私はジャスミンのユニットテストとsinonでangular1使用しています。私が手

エラーは次のとおりである:「真等しくなるように偽の期待」

答えて

1

私はそれがここにあなたが約束

sinon.stub(filterValidationService, "validateSize").returns(deferred.promise);

を返している可能性がありますので、しかし、あなたは決してならないと思います約束を解決するので、.then()は決して呼び出されません。

it()メソッドで約束を変数に保持し、scope.UpdateTable()の後に解決する可能性があります。

+0

それは次のようになりますか?deferred.resolved(mockData.size); – AngularM

+0

メソッド名は 'resolve'ですhttps://docs.angularjs.org/api/ng/service/$qそして' it() 'に' deferred.promise.finally() 'を追加する必要があります。 'メソッドを呼び出して、' expect() 'を実行します。 – Stephen

関連する問題