Я использую драгоценный камень геокодера, но не знаю, в каком файле я должен вставить this code. Можешь сказать мне ?Тестирование с помощью геокодера gem
ответ
Этот фрагмент кода должен быть в разделе 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
Альтернатива, чтобы положить свои окурки в испытательной установке, чтобы определить их в spec/support
:
спецификации/поддержка/geocoder.rb
Geocoder.configure(lookup: :test)
Geocoder::Lookup::Test.add_stub(
...
)
end
В то время как этот подход имеет недостаток в том, что вы вводите гостей в тайны, это делает СУХОЙ вещи.
Не забудьте обернуть это в 'module' с именем вашего выбора, если вы включают его в 'spec/rails_helper.rb', используя' config.include yourModuleName' –
Поскольку вы не указали свою тестовую структуру, я дам конкретный ответ.
Я использую огурец и Rspec. Хотя все вышеизложенное верно из @DevDude и @malandrina, вот более полный отзыв о том, где код может идти, и как добавить записи для обратного геокодирования (lat/lon -> address):
Поместите свои заглушки в папку spec. Я создал массив массивов, так что я мог бы добавить несколько «Lookups», чтобы быть затушил:
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]) }
Reference ваши окурки в папке поддержки Огурцов:
features/support/env.rb
require Rails.root.join("spec/support/geocoder_stubs")
Надеется, что это помогает!
Я помещаю этот код в свой /config/initializers/geocoder.rb
с условным значением для 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
Я использую RSpec ... –
Я только что обновил ответ как на вашей обратной связи, имеют хороший один – DevDude