Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Geocoder: Stub out address geocoding during RSpec unit tests
# In spec_helper:
# RSpec.configure do |config|
# ...
# config.include(MockGeocoder)
# end
#
# In your tests:
# it 'mock geocoding' do
# mock_geocoding! # You may pass additional params to override defaults (i.e. :coordinates => [10, 20])
# address = Factory(:address)
# address.lat.should eq(1)
# address.lng.should eq(2)
# end
require 'geocoder/results/base'
module MockGeocoder
def self.included(base)
base.before :each do
::Geocoder.stub(:search).and_raise(RuntimeError.new 'Use "mock_geocoding!" method in your tests.')
end
end
def mock_geocoding!(options = {})
options.reverse_merge!(:address => 'Address', :coordinates => [1, 2], :state => 'State', :state_code => 'State Code', :country => 'Country', :country_code => 'Country code')
MockResult.new.tap do |result|
result.stub options
Geocoder.stub :search => [result]
end
end
class MockResult < ::Geocoder::Result::Base
def initialize(data = [])
super(data)
end
end
end
@dtuite

This comment has been minimized.

Copy link

commented Oct 14, 2011

Hi. I'm having a problem using this because the Geocoder::Result module isn't found.

spec/support/mock_geocoder.rb:37:in `<module:MockGeocoder>': uninitialized constant Geocoder::Result (NameError)

As far as I can tell, it's never loaded by Geocoder.

Do I need to require this file specifically? How do I do that?

@jmccartie

This comment has been minimized.

Copy link

commented Oct 27, 2011

@dtuite Did you ever figure it out?

@dtuite

This comment has been minimized.

Copy link

commented Oct 27, 2011

@jmccartie I'm afraid not. Let me know if you get anywhere please.

@jmccartie

This comment has been minimized.

Copy link

commented Oct 27, 2011

@dtuite I bailed on trying to stub out the object and used FakeWeb instead.

@dtuite

This comment has been minimized.

Copy link

commented Oct 27, 2011

@paveltyk

This comment has been minimized.

Copy link
Owner Author

commented Oct 28, 2011

add require 'geocoder/results/base' at the top of gist

@glittershark

This comment has been minimized.

Copy link

commented Oct 8, 2014

For anyone using Rspec 2+, I made a fork that works with the new expect syntax.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.