[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")
@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")

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?


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