使用rspec进行Rails Geocoder测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用rspec进行Rails Geocoder测试相关的知识,希望对你有一定的参考价值。

我正在尝试设置我的RSpec测试以使用存根而不是使用网络来进行地理编码。

我补充说:

before(:each) do
Geocoder.configure(:lookup => :test)
Geocoder::Lookup::Test.add_stub(
    "Los Angeles, CA", [{
                            :latitude    => 34.052363,
                            :longitude    => -118.256551,
                            :address      => 'Los Angeles, CA, USA',
                            :state        => 'California',
                            :state_code   => 'CA',
                            :country      => 'United States',
                            :country_code => 'US'
                        }],

)

结束

我正在使用FactoryGirl来创建测试数据,如下所示:

FactoryGirl.define do
    factory :market do
    city 'Los Angeles'
    state 'CA'
    radius 20.0
  end
end

正确地对纬度/经度进行地理编码并以纬度/经度存储。但是,当我尝试:

Market.near(params[:search])

它返回nil ..但是,如果我只是使用lookup =>:google它就像我打算一样。有没有人以前有这个工作,特别是地理编码器的近距离方法?

答案

我最终在一个新项目上重新回到了这个问题,然后想出来了。

地理编码器上的文档实际上声明哈希必须有字符串键而不是符号。 geocoder docs - see notes

before(:each) do
    Geocoder.configure(:lookup => :test)
    Geocoder::Lookup::Test.add_stub(
        "Los Angeles, CA", [{
                                "latitude"    => 34.052363,
                                "longitude"    => -118.256551,
                                "address"      => 'Los Angeles, CA, USA',
                                "state"        => 'California',
                                "state_code"   => 'CA',
                                "country"      => 'United States',
                                "country_code" => 'US'
                            }],

    )
end

而不是我在原帖中怎么做的:

即yaazkssvpoi

我最终做了一些更有活力的事情:

:latitude => 34.052363

在我的工厂:

# frozen_string_literal: true

module GeocoderStub
  def self.stub_with(facility)
    Geocoder.configure(lookup: :test)

    results = [
      {
          'latitude' => Faker::Address.latitude.first(9),
          'longitude' => Faker::Address.longitude.first(9)
      }
    ]

    queries = [facility.full_address, facility.zip]
    queries.each { |q| Geocoder::Lookup::Test.add_stub(q, results) }
  end
end

这为每个Facility工厂添加了一个地理编码器存根,该工厂是为完整地址(设施中定义的方法)和zip构建的。

以上是关于使用rspec进行Rails Geocoder测试的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 3.1 中使用 Capybara、Rspec 和 Selenium 进行测试时登录失败

使用 Rspec 测试 Rails 3.1 可安装引擎

Rails:在 RSpec 测试查看编辑表单时出错

.env 未使用 rspec 在 Rails 的测试环境中加载

在 Rails 3 上使用 Rspec 和 MongoID 清理或重置测试数据库

ruby [rspec]“使用RSpec测试Rails程序”笔记