2013-09-05 40 views

回答

14

這一段代碼應在任何測試框架您使用的設置部分。

如果使用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 
+0

我使用rspec的... –

+1

我剛剛更新的答案,按您的反饋,有一個好 – DevDude

3

的替代方法把你的存根測試設置中是spec/support定義它們:

規格/支持/ geocoder.rb

Geocoder.configure(lookup: :test) 

Geocoder::Lookup::Test.add_stub(
    ... 
) 
end 

雖然這種方法有將神祕客人引入到測試中的缺點,但它乾的事情。

+1

不要忘記與你選擇的名稱來包裝這個在'module',如果你使用'config.include yourModuleName'將它包含在'spec/rails_helper.rb'中 –

7

既然你沒有說明你的測試框架,我會給出一個具體的答案。

我正在使用Cucumber和Rspec。雖然以上所有內容均來自@DevDude和@malandrina,但對於代碼可以使用的位置以及如何添加用於反向地理編碼(緯度/經度 - >地址)的條目,此處提供了更完整的提示:

把你的存根放在spec文件夾中。我創建了一個數組的數組,這樣我可以添加多個「查找」被滅掉:

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]) } 

參考您在黃瓜支持文件夾存根:

features/support/env.rb 
require Rails.root.join("spec/support/geocoder_stubs") 

希望這有助於!

1

我把這個代碼在我/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