On 2008-11-19, at 12:26, Chris Flipse wrote:
I've actually taken this old gem and enhanced it a bit

module Spec::Mocks::Methods
  def stub_association!(association_name, methods_to_be_stubbed ={})
    mock_assn = Spec::Mocks::Mock.new(association_name.to_s)
stub_association_with(association_name, mock_assn, methods_to_be_stubbed)
  end

def stub_association_with(association_name, values, methods_to_be_stubbed = {})
    methods_to_be_stubbed.each do |meth, return_value|
        values.stub!(meth).and_return(return_value)
    end
    yield(values) if block_given?

    self.stub!(association_name).and_return(values)
  end
end

This lets me specify the "contents" of an association:

foo.stub_association_with(:bar, [EMAIL PROTECTED], @bar2, @bar3], :find => 
@bar1)

and also gives me some more fine grained control about stubbing the association

foo.stub_association_with(:bar, [EMAIL PROTECTED], @bar2, @bar3]) do |assn|
  assn.stub!(:find).with(1).and_return @bar1
  assn.stub!(:find).with(2).and_return @bar2
  assn.stub!(:find).with(5).and_raise RecordNotFound
end

Sending in a block like that is a great idea.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to