我已經得到了下面的函數在我AngularJS控制器:茉莉:調用然後在AngularJS答應
service.getPlaceByAddress = function(address) {
return $q(function(resolve, reject) {
geocoder().geocode({'address': address}, function(result, status) {
// gets called
if (status === google.maps.GeocoderStatus.OK) {
return resolve(result);
}
return reject();
});
});
};
我想測試這段代碼,但當時的功能會不會被調用。但是,地理編碼功能肯定會被調用。
it('returns an error if the data service returns no results', function(done) {
GoogleMaps.getPlaceByAddress('Testlocation').then(function() {
done();
// gets never called
});
$scope.$digest();
});
相反即時得到一個異步超時:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
編輯
當我直接返回resolve
,它按預期工作:
service.getPlaceByAddress = function(address) {
return $q(function(resolve, reject) {
return resolve();
//geocoder()...
});
};
所以我認爲,問題在於電話ack的地理編碼器。這是奇怪的,因爲代碼完全在瀏覽器中,而不是在茉莉測試...
問題是完成的參數。 看到這個: http://stackoverflow.com/questions/22604644/jasmine-async-callback-was-not-invoked-within-timeout-specified-by-jasmine-defa – Luca
@Luca:可惜這不是解決方案。如果我刪除'done'參數,承諾不會解決...:/ – roNn23