2013-09-05 2 views

답변

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

나는 좋은 사람이 –

+1

... RSpec에있는 사용하고 있습니다 'config.include yourModuleName'을 사용하여'spec/rails_helper.rb'에 포함시킵니다. – DevDude

3

대안을 테스트 설정에 스텁을 두는 것은 spec/support에서 그들을 정의하는 것입니다 :

사양/지원/geocoder.rb

Geocoder.configure(lookup: :test) 

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

이 접근법은 미스터리 게스트를 테스트에 도입하는 단점이 있지만 실제로는 건조합니다.

+1

가 원하는 이름으로 module''이 포장하는 것을 잊지 마세요, 그냥 귀하의 의견에 따라 대답을 업데이트 –

7

테스트 프레임 워크를 언급하지 않았으므로 구체적인 답변을 드리겠습니다.

나는 오이와 Rspec를 사용하고 있습니다. @DevDude와 @malandrina에서 위의 모든 내용이 사실이지만 코드가 어디로 갈 수 있는지에 대한보다 완전한 팁과 역 지오 코딩 (lat/lon -> 주소) 항목을 추가하는 방법은 다음과 같습니다.

스텁을 spec 폴더에 넣으십시오.

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

희망이 도움이 : 오이 지원 폴더에 스텁이

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

참조 : 나는 밖으로 스텁 할 여러 "조회"를 추가 할 수 있도록 내가 배열의 배열을 만들었습니다!

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