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? }

Avoiding Unnecessary API Requests

虽然不是特定于地理编码器 gem,但您最好的选择可能是以某种方式停止服务。

您有几个选择:

  1. 您可以在测试环境中打开缓存,这样您每天只发出一个外部 http 请求。 Rails Guides has some good examples of ActiveSupport::Cache. The relevant section is low-level caching。虽然这可能对你有用,但我认为它对你的情况来说有点过于复杂。

  2. 我建议一起模拟外部 HTTP 服务。 Thoughtbot has a somewhat outdated but still relevant guide to setting up Webmock,一个用于模拟外部 HTTP 服务的流行库。它与所有流行的测试框架很好地集成。

希望对您有所帮助。

README

中描述了使用 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'
    }
  ]
)