Create a gist now

Instantly share code, notes, and snippets.

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)
# 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( 'Use "mock_geocoding!" method in your tests.')
def mock_geocoding!(options = {})
options.reverse_merge!(:address => 'Address', :coordinates => [1, 2], :state => 'State', :state_code => 'State Code', :country => 'Country', :country_code => 'Country code') do |result|
result.stub options
Geocoder.stub :search => [result]
class MockResult < ::Geocoder::Result::Base
def initialize(data = [])

dtuite 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?

@dtuite Did you ever figure it out?

dtuite commented Oct 27, 2011

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

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


PavelTyk commented Oct 28, 2011

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

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