Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stub out address geocoding during RSpec unit test

I'm using the geocoder gem to add geocoding functionality to one of my Active Record model classes. This works great, but I don't actually want the geocoding to fire during unit tests.

I've tried stubbing out the call to geocode by adding this to my RSpec test:

before(:each) do
User.stub!(:geocode).and_return([1,1]) end

However, when I run my tests it still appears to be calling out to geocode. What am I doing wrong?

FYI, this all works if I stub on the instance level (e.g. some_user.stub! instead of User.stub!).

like image 758
Kevin Pang Avatar asked Feb 02 '23 19:02

Kevin Pang


2 Answers

If you want to use stubbing on the instance level, you should use other mocking framework than RSpec’s. It's mocha for example (add the following to spec/spec_helper.rb):

Spec::Runner.configure do |config|
  config.mock_with :mocha
end

http://rspec.info/documentation/mocks/other_frameworks.html

Now, you can use any_instance in your tests:

before(:each) do
 User.any_instance.stub(:geocode).and_return([1,1]) 
end
like image 75
Vasiliy Ermolovich Avatar answered Feb 05 '23 10:02

Vasiliy Ermolovich


it's

before(:each) do 
  Address.any_instance.stubs(:geocode).returns([1,1])
end

with mocha.

like image 42
fmalamitsas Avatar answered Feb 05 '23 08:02

fmalamitsas