2014-04-28 67 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; 
}