2013-09-05 3 views
6

के साथ परीक्षण मैं geocoder मणि का उपयोग कर रहा हूँ, लेकिन मुझे नहीं पता कि मुझे कौन सी फाइल this code पेस्ट करना होगा। क्या तुम मुझे बता सकते हो ?geocoder मणि

उत्तर

14

कोड का वह टुकड़ा जो भी टेस्ट फ्रेमवर्क आप उपयोग कर रहे हैं उसके 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 
+0

मैं rspec उपयोग कर रहा हूँ ... –

+1

मैं सिर्फ आपकी प्रतिक्रिया के अनुसार जवाब अद्यतन, है एक अच्छा एक – DevDude

3

एक वैकल्पिक परीक्षण सेटअप में अपने स्टब्स डाल करने के लिए उन्हें spec/support में परिभाषित करने के लिए है:

कल्पना/support/geocoder.rb

Geocoder.configure(lookup: :test) 

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

हालांकि इस दृष्टिकोण में रहस्य परीक्षणों को आपके परीक्षणों में पेश करने का नकारात्मक पक्ष है, यह DRY चीजें करता है।

+1

मत भूलना अपनी पसंद का एक नाम के साथ 'module' में इस रैप करने के लिए, यदि आप 'config.clude yourModuleName' का उपयोग करके 'spec/rails_helper.rb' में शामिल हैं –

7

चूंकि आपने अपना परीक्षण ढांचा नहीं बताया है, इसलिए मैं एक विशिष्ट उत्तर दूंगा।

मैं ककड़ी और रुपेक का उपयोग कर रहा हूं। जबकि उपरोक्त सभी @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

मैं इस कोड को में Rails.env.test? के लिए एक सशर्त के साथ डाल रहा हूं। मैंने @devDude द्वारा उल्लिखित दृष्टिकोणों की कोशिश की, यह बहुत अच्छा काम करता था, लेकिन मैं नहीं चाहता था कि गलती से भी मेरे आरएसपीईसी परीक्षणों से कोई भी जियोकोडिंग वास्तविक कॉल किया जा रहा हो (बहुत सारे चश्मा बहुत सारी फाइलों पर इस पर निर्भर थे) + यह दृष्टिकोण किसी भी तरह के परीक्षण ढांचे के लिए काम करेगा (यह 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