Rails 4 - 地理编码器在测试套件中达到查询限制
Rails 4 - Geocoder hitting query limit in test suite
当 运行 我的测试套件时,大约一半的时间它会变红,因为我达到了每秒查询限制的地理编码:
Google Geocoding API error: over query limit.
我正在使用地理编码器 gem 和 google 个地图/地点 api。
看来我需要设置某种休眠选项,但在地理编码器文档中,唯一提到的是 rake 任务。我如何设置它,或防止我的测试套件每秒发出过多的地理编码请求?
试试这个:
after_validation :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
虽然不是特定于地理编码器 gem,但您最好的选择可能是以某种方式停止服务。
您有几个选择:
您可以在测试环境中打开缓存,这样您每天只发出一个外部 http 请求。 Rails Guides has some good examples of ActiveSupport::Cache. The relevant section is low-level caching。虽然这可能对你有用,但我认为它对你的情况来说有点过于复杂。
我建议一起模拟外部 HTTP 服务。 Thoughtbot has a somewhat outdated but still relevant guide to setting up Webmock,一个用于模拟外部 HTTP 服务的流行库。它与所有流行的测试框架很好地集成。
希望对您有所帮助。
中描述了使用 Geocoder gem 进行测试的正确方法
将此添加到您的 spec/support
(或等效)目录,错误消息应该停止。
# spec/support/geocoder.rb
Geocoder.configure(:lookup => :test)
Geocoder::Lookup::Test.set_default_stub(
[
{
'latitude' => 40.7143528,
'longitude' => -74.0059731,
'address' => 'New York, NY, USA',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
}
]
)
当 运行 我的测试套件时,大约一半的时间它会变红,因为我达到了每秒查询限制的地理编码:
Google Geocoding API error: over query limit.
我正在使用地理编码器 gem 和 google 个地图/地点 api。
看来我需要设置某种休眠选项,但在地理编码器文档中,唯一提到的是 rake 任务。我如何设置它,或防止我的测试套件每秒发出过多的地理编码请求?
试试这个:
after_validation :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
虽然不是特定于地理编码器 gem,但您最好的选择可能是以某种方式停止服务。
您有几个选择:
您可以在测试环境中打开缓存,这样您每天只发出一个外部 http 请求。 Rails Guides has some good examples of ActiveSupport::Cache. The relevant section is low-level caching。虽然这可能对你有用,但我认为它对你的情况来说有点过于复杂。
我建议一起模拟外部 HTTP 服务。 Thoughtbot has a somewhat outdated but still relevant guide to setting up Webmock,一个用于模拟外部 HTTP 服务的流行库。它与所有流行的测试框架很好地集成。
希望对您有所帮助。
将此添加到您的 spec/support
(或等效)目录,错误消息应该停止。
# spec/support/geocoder.rb
Geocoder.configure(:lookup => :test)
Geocoder::Lookup::Test.set_default_stub(
[
{
'latitude' => 40.7143528,
'longitude' => -74.0059731,
'address' => 'New York, NY, USA',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
}
]
)