我正在使用地理编码器 gem,但我不知道我必须将此代码粘贴到哪个文件中。你能告诉我吗 ?
4 回答
这段代码应该在您使用的任何测试框架的 SETUP 部分。
如果使用 rspec,它应该在这里:
describe Something do
before(:all) do
Geocoder.configure(:lookup => :test)
Geocoder::Lookup::Test.add_stub(
"New York, NY", [
{
'latitude' => 40.7143528,
'longitude' => -74.0059731,
'address' => 'New York, NY, USA',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
}
]
)
end
end
由于您没有说明您的测试框架,我将给出一个具体的答案。
我正在使用 Cucumber 和 Rspec。尽管@DevDude 和@malandrina 的上述所有内容都是正确的,但这里有一个更完整的提示,说明代码可以去哪里,以及如何添加反向地理编码条目(纬度/经度-> 地址):
将您的存根放在规范文件夹中。我创建了一个数组数组,这样我就可以添加多个“查找”来删除:
spec/support/geocoder_stubs.rb
addresses = {
"230 West 43rd St., New York City, NY 10036" => {
'latitude' => 40.7573862,
'longitude' => -73.9881256,
'address' => '230 West 43rd St., New York City, NY 10036',
'city' => 'New York City',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
},
[40.75747130000001, -73.9877319] => {
'latitude' => 40.75747130000001,
'longitude' => -73.9877319,
'address' => '229 West 43rd St., New York City, NY 10036',
'city' => 'New York City',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
},
"Worthington, OH" => {
'latitude' => 40.09846115112305,
'longitude' => -83.01747131347656,
'address' => 'Worthington, OH',
'city' => 'Worthington',
'state' => 'Ohio',
'state_code' => 'OH',
'country' => 'United States',
'country_code' => 'US'
},
}
Geocoder.configure(:lookup => :test)
addresses.each { |lookup, results| Geocoder::Lookup::Test.add_stub(lookup, [results]) }
在 Cucumber 支持文件夹中引用您的存根:
features/support/env.rb
require Rails.root.join("spec/support/geocoder_stubs")
希望这可以帮助!
将存根放入测试设置的另一种方法是将它们定义在spec/support
:
规范/支持/geocoder.rb
Geocoder.configure(lookup: :test)
Geocoder::Lookup::Test.add_stub(
...
)
end
虽然这种方法有将神秘客人引入您的测试的缺点,但它确实使事情变得干燥。
我将这段代码放入我/config/initializers/geocoder.rb
的条件 for 中Rails.env.test?
。我尝试了@devDude 提到的上述方法,效果很好,但我只是不希望从我的 rspec 测试中进行任何地理编码真实调用,即使是错误的(在很多文件中有很多规范依赖于此)+这种方法适用于任何类型的测试框架(无论是 testunit 或 mintests 还是黄瓜)。
这就是我的/config/initializers/geocoder.rb
文件的样子。
if Rails.env.test?
Geocoder.configure(:lookup => :test)
# Particular Look up
Geocoder::Lookup::Test.add_stub(
"New York, NY", [
{
'latitude' => 40.7143528,
'longitude' => -74.0059731,
'address' => 'New York, NY, USA',
'state' => 'New York',
'state_code' => 'NY',
'country' => 'United States',
'country_code' => 'US'
}
]
)
#default stub
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'
}
]
)
else
Geocoder.configure(
:timeout => 3, # geocoding service timeout (secs)
:lookup => :google, # name of geocoding service (symbol)
:language => :en, # ISO-639 language code
:units => :mi, # :km for kilometers or :mi for miles
:distances => :linear # :spherical or :linear
)
end