On Aug 22, 2011, at 5:11 AM, Nikolay Sturm wrote: > Hi, > > I have a strange problem with mocking an object that has a method called > 'load'. With Rails 2.3 and rspec-rails 1.3 I could do sth like this: > > describe Foo do > let(:bar) { mock(Bar).as_null_object } > before(:each) do > Bar.stub(:new).and_return(bar) > end > > it 'does something' do > Foo.do_something > end > end > > with > > class Foo > def do_something > bar = Bar.new > bar.load > end > end > > After an upgrade to rails 3.0.10 and rspec-rails 2.6.1 I get an > ArgumentError: > wrong number of arguments (0 for 1) > > If I add "bar.method(:load)" to do_something(), it prints > > #<Method: RSpec::Mocks::Mock(ActiveSupport::Dependencies::Loadable)#load>
This ^^ tells you everything you need to know to research the problem. If you look at the code for ActiveSupport::Dependencies (https://github.com/rails/rails/blob/v3.0.10/activesupport/lib/active_support/dependencies.rb), you'll see that the Loadable module is included in every object. See: https://github.com/rails/rails/blob/v3.0.10/activesupport/lib/active_support/dependencies.rb#L654 https://github.com/rails/rails/blob/v3.0.10/activesupport/lib/active_support/dependencies.rb#L281-286 This means that even mock objects already have a load method, which is defined to accept one or more arguments: https://github.com/rails/rails/blob/v3.0.10/activesupport/lib/active_support/dependencies.rb#L234-236 This means that you need to explicitly stub the load method to do what you're trying to do: let(:bar) { mock(Bar, :load => nil).as_null_object } HTH, David > which doesn't look right to me. I am using ree-1.8.7-2011.03. > > Does anyone have an idea what this is about and how to properly deal > with this? > > cheers, > > Nikolay _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users