[rspec-users] Can I stub a method on a belongs_to association:
Moses Hohman
moses.hohman at gmail.com
Tue Jun 26 16:13:17 EDT 2007
Stub @asset's :video first, i.e.
@mock_video_proxy = mock("assay.video proxy")
@asset.stub!(:video).and_return(@mock_video_proxy)
@assay.video.stub!(:hook).and_return @mock_hook
Generally mocking starts to get frustrating when the code you're mocking
doesn't follow the Law of Demeter. I have been creating helper methods for
these things, e.g.
def mock_video_proxy
@mock_video_proxy ||= begin
proxy = mock("assay.video proxy")
@asset.stub!(:video).and_return(proxy)
proxy
end
proxy
end
so you can just use
mock_video_proxy.stub!(:hook).and_return @mock_hook
in any spec. I think there might be a better way, though. I'm not sure it's
worth it to use mocks in this situation since you're already using fixtures.
Why not just check the expected outcome of the hook method?
Moses
On 6/26/07, Pat Maddox <pergesu at gmail.com> wrote:
>
> describe Asset, " when destroyed" do
> fixtures :assets, :videos, :sites, :publish_settings
>
> before(:each) do
> @asset = assets(:test_asset)
> @mock_hook = mock("hook")
> @asset.video.stub!(:hook).and_return @mock_hook # error occurs here
> end
>
> it "should call the delete hook" do
> @mock_hook.should_receive(:update).with("test_video", :asset_id =>
> @assetid, :asset_action => "destroy")
> @asset.destroy
> end
> end
>
> NameError in 'Asset when destroyed should call the delete hook'
> undefined method `hook' for class
> `ActiveRecord::Associations::BelongsToAssociation'
>
> I'm not sure why I can't stub the hook method on the video proxy...I
> need to though, because my implementation is
>
> video.hook.update....
>
> Any ideas?
> Pat
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20070626/2575700f/attachment.html
More information about the rspec-users
mailing list