2014-04-28 62 views
4

想测试一个承诺基础服务,它确实是这样的:

load : function(){ 
     var deferred = $q.defer(); 

     //Do misc async stuff 
     deferred.resolve(); 

     return deferred.promise; 
    } 

当试图测试这个因果报应+茉莉花2.0我尝试使用它的有()回调,但它总是超时,永远不会解决承诺。

beforeEach(inject(function ($injector) { 
    service = $injector.get('myService'); 
    $window = $injector.get("$window"); 
    $rootScope = $injector.get('$rootScope'); 
})); 

describe('Call load', function() { 
    it('resolves its promise', function (done) { 
     service.load().then(function(){ 
      expect(something).not.toBe(undefined); 
      done(); 
     }); 
    }); 
}); 

从茉莉文档这是怎么了我,虽然你应该使用()完成与异步代码一起,但似乎问题是,承诺从未解决

+4

$范围$适用()应该解决的承诺 –

+0

感谢@TimCastelijns。你应该做出答案。 –

+0

谢谢@TimCastlijns,我同意他人你应该用一个解释做出答案。单元测试中未解决的承诺问题让我很困惑。 –

回答

0

正如在评论中提到@TimCastelijns,你需要调用$scope.$apply解决您的单元测试的承诺:

load: function(){ 
    var deferred = $q.defer(); 

    setTimeout(function() { 
     //Do misc async stuff 
     deferred.resolve(); 
     $rootScope.$apply(); 
    }); 

    return deferred.promise; 
}