2015-01-08 6 views
2

약속 단위 테스트를 테스트하는 데 문제가 있습니다.재스민 단위 테스트 약속을 모의

"expect (scope.test) .toBe (12);"이라는 어설 션을 넣었습니다. 이것은 내 코드에서 반환 된 약속의 내부입니다. 다음은

나는 시험에 내 실제 코드 시도하고있다 : 아래

$scope.getBudgets = function(){ 
    BudgetService.getBudgets().then(function(response) { 
     $scope.test = 12; 

    }, function(response) { 

    }); 
} 

내 단위 테스트입니다 : 당신에게 전화를 놓치고처럼

describe('budgetOverviewCtrl tests', function() { 

beforeEach(module('app')); 
beforeEach(module('ngRoute')); 

var ctrl, scope, deferred; 

describe('budgetOverviewCtrl with test', function() { 
    beforeEach(inject(function($controller, _$rootScope_) { 

     scope = _$rootScope_.$new(); 

     ctrl = $controller('budgetOverviewCtrl', { 
      $scope: scope 
     });   
    })); 

    it('Should check if getBudgets service promise exists and returns as expected', inject(function($injector, $q, BudgetService) { 

     BudgetService = $injector.get("BudgetService");   

     deferred = $q.defer(); 
     deferred.resolve({"Hello": "World"}); 

     spyOn(BudgetService, 'getBudgets').and.callFake(function() { 
      return deferred.promise; 
     }); 

     scope.getBudgets(); 

     expect(BudgetService.getBudgets).toHaveBeenCalled(); 

     **//Below line isnt called - this is inside the promise then.** 
     expect(scope.test).toBe(12); 
    })); 
}); 
}); 

답변

1

같습니다 시험에서 scope.getBudgets()을 호출 한 후 $rootScope.$apply(). Angular에서는 테스트에서 수동으로 트리거해야하는 다이제스트주기의 일부로 성공 및 오류 콜백을 약속합니다.

+0

[SitePoint : Angular의 $ apply() 및 $ digest()]에 대한 이해 (http://www.sitepoint.com/understanding-angulars-apply-digest/) – xmojmr

관련 문제