Skip to content
Create a gist now

Instantly share code, notes, and snippets.

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.


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
Something went wrong with that request. Please try again.