Używam klejnotu geokodera, ale nie wiem, w którym pliku muszę wkleić this code. Czy możesz mi powiedzieć ?Testowanie z klejnotem geokodera
Odpowiedz
Ten fragment kodu powinien znajdować się w części USTAWIENIA jakiejkolwiek struktury testowej, której używasz.
przypadku korzystania rspec powinno go tutaj:
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
alternatywą dla oddanie odcinki w konfiguracji testowej jest zdefiniowanie ich w spec/support
:
Spec/support/geocoder.rb
Geocoder.configure(lookup: :test)
Geocoder::Lookup::Test.add_stub(
...
)
end
Podczas gdy takie podejście ma wadę polegającą na wprowadzaniu tajemniczych gości do twoich testów, robi to SZYBKO.
Nie zapomnij owinąć to w 'module' z nazwą swojego wyboru, jeśli ciebie włączają go do 'spec/rails_helper.rb' używając' config.include yourModuleName' –
Ponieważ nie podano struktury testowej, podam konkretną odpowiedź.
Używam Ogórek i Rspec. Chociaż wszystkie powyższe są prawdziwe z @DevDude i @malandrina, tutaj jest bardziej kompletna wskazówka, gdzie kod może iść, i jak dodać również wpisy do geokodowania wstecznego (adres lat/lon ->):
Umieść stubs w folderze spec. I stworzył tablicę tablic tak, że mogę dodać wiele "wyszukiwań", aby być zgaszone:
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 wasze odcinki w folderze Support Ogórek:
features/support/env.rb
require Rails.root.join("spec/support/geocoder_stubs")
Hope this helps!
Umieszczę ten kod w moim /config/initializers/geocoder.rb
z warunkiem dla Rails.env.test?
. Próbowałem powyższych podejść wymienionych przez @devDude, działało świetnie, ale po prostu nie chciałem, aby jakiekolwiek geokodowanie wywoływało prawdziwe wywołania z moich testów rspec, nawet przez pomyłkę (miał wiele specyfikacji zależnych od tego w wielu plikach) + to podejście będzie działać dla każdego rodzaju ram testowych (czy to testunit, mintests czy też z ogórkiem).
Tak wygląda mój plik /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
Używam rspec ... –
Właśnie zaktualizowane odpowiedź jak na swoje opinie, mają dobry – DevDude