【发布时间】:2017-03-27 07:23:08
【问题描述】:
我的 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();
});
});
};
我想测试这段代码,但是 then 函数不会被调用。但是 geocode 函数肯定会被调用。
it('returns an error if the data service returns no results', function(done) {
GoogleMaps.getPlaceByAddress('Testlocation').then(function() {
done();
// gets never called
});
$scope.$digest();
});
而不是我得到一个异步超时:
错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。
编辑
当我直接返回 resolve 时,它按预期工作:
service.getPlaceByAddress = function(address) {
return $q(function(resolve, reject) {
return resolve();
//geocoder()...
});
};
所以我认为,问题出在地理编码器的回调中。这很奇怪,因为代码在浏览器中完美运行,但在 jasmine 测试中却不行……
【问题讨论】:
-
问题是 done 参数。看到这个:stackoverflow.com/questions/22604644/…
-
@Luca:遗憾的是,这不是解决方案。如果我删除
done参数,承诺也不会解决......:/
标签: javascript angularjs jasmine karma-jasmine