Rails Rspec 和 Geocoder IP 查询

Rails Rspec and Geocoder IP lookup

Geocoder DOCS 解释如何使用街道地址伪造 Geocoder 查找,但它似乎不适用于 IP 地址。

这是我的 spec/support/geocoder.rb

Geocoder.configure(:lookup => :test)

Geocoder::Lookup::Test.add_stub(
  "1.1.1.1", [
  {
    'latitude'     => 10,
    'longitude'    => 10,
    'address'      => 'Test Address',
    'state'        => 'Test State',
    'state_code'   => 'TS',
    'country'      => 'Test Country',
    'country_code' => 'TC'
  }
]
)

Geocoder::Lookup::Test.set_default_stub(
  [
    {
      'latitude'     => 10,
      'longitude'    => 10,
      'address'      => 'Test Address',
      'state'        => 'Test State',
      'state_code'   => 'TS',
      'country'      => 'Test Country',
      'country_code' => 'TC'
    }
  ]
)

这是我的服务:

if params[:ip]
  lat = Geocoder.search(params[:ip])[0].latitude
  lng = Geocoder.search(params[:ip])[0].longitude
  venues = venues.near([lat, lng], APP_CONFIG['geo_location_radius'], order: 'average_rating DESC')
end

这是我的服务规范:

context "find featured venues by ip" do
  let(:params) do
    {
      date:     Date.today,
      featured: true,
      ip:       '1.1.1.1',
    }
  end

  it do
    aggregate_failures do
      expect(raw_venues.map { |v| v.id }.sort).to eq [venue1.id]
    end
  end

end

如果我在 it 块中使用 pry 进入并尝试 Geocoder.search('1.1.1.1') 我会得到一个 "real" 对象响应,其中的位置在澳大利亚而不是我的存根,而我正确地得到我的存根如果我输入类似 Geocoder.search('Florence, Italy') ..

如何设置存根响应以使用 IP 查找?

解决方法很简单:

Geocoder.configure(ip_lookup: :test)