I have a Premise model with an after_create method, along the lines of:
class Premise < ActiveRecord::Base
…
after_create :etl_attributes
…
end
In production code, etl_attributes accesses the web. For testing I’m
using WebMock and VCR in cases where I want to test the etl_attributes
function – works like a champ.
For all other tests, I want to create a real Premise object (I need it
for HABTM associations), but I want to stub out the call to
etl_attributes. My problem is that I haven’t figured out the right way
to do so. The following DOESN’T work (it should be clear that I’m using
FactoryGirl as well):
mock_model(Premise)
Premise.stub!(:etl_attributes)
@premise = Factory.create(:premise)
… this still calls etl_attributes and WebMock gets appropriately mad.
What am I missing?
On Feb 14, 11:31am, Fearless F. [email protected] wrote:
function – works like a champ.
[email protected]://rubyforge.org/mailman/listinfo/rspec-users
etl_attributes is an instance method, not a class method. So, you want
to stub the method on the Premise instance. Since you’re using rspec-
mocks, I would recommend something like this:
@premise = Factory.build(:premise)
@premise.stub(:etl_attributes)
@premise.save!
For more info using pure mock objects, checkout these pages:
http://relishapp.com/rspec/rspec-rails/v/2-5/dir/mocks/mock-model
http://relishapp.com/rspec/rspec-rails/v/2-5/dir/mocks/stub-model
Mike Mazur wrote in post #981665:
Perhaps one way to approach this is to have WebMock return an
appropriate success message in response to the network call that
:etl_attributes makes.
Mike
Ah - good point. With all the options for stubbing and mocking, I’d
forgotten that one. Factory Girl is creating premise objects that will
generate different URLs, but I can use the regex option for WebMock to
catch them.
Thanks for getting me unstuck!
Hi,
On Tue, Feb 15, 2011 at 02:31, Fearless F. [email protected]
wrote:
function – works like a champ.
… this still calls etl_attributes and WebMock gets appropriately mad.
What am I missing?
Perhaps one way to approach this is to have WebMock return an
appropriate success message in response to the network call that
:etl_attributes makes.
Mike