[rspec-users] Problems with mock assigned to a constant

Scott Taylor mailing_lists at railsnewbie.com
Fri Jul 25 00:00:04 EDT 2008

On Jul 24, 2008, at 11:49 PM, Matt Lins wrote:

> Hi all,
> Initially I thought this was a bug in the built-in mocking  
> framework(and it still may be), but I better hash it out on the  
> mailing list before I file/reopen the ticket:
> http://rspec.lighthouseapp.com/projects/5645/tickets/478-mocks-on-constants#ticket-478-6
> I thought my example illustrated my problem, but obviously I was  
> passing the wrong arguments to the mock.  I revised my example to  
> more clearly state my problem:
> http://gist.github.com/2372
> This is a snip of a some code from a library I'm writing.  When I  
> run this spec I get the following:
> # spec migration_spec.rb
> .F
> 1)
> Spec::Mocks::MockExpectationError in 'Migration should find the  
> records'
> Mock 'MyModel Class' received unexpected message :count with (no args)
> ./migration.rb:14:in `run'
> ./migration_spec.rb:19:
> Finished in 0.009164 seconds
> 2 examples, 1 failure
> ------------------------------------------
> I want to mock out MyModel completely because it's an ActiveRecord  
> object.  As suggested, if I define the MyModel class, this whole  
> spec will pass.  But, I don't think I should need to do that, should  
> I?  So it seems to only occur when I assign the mock to a constant.
> So, even though MyModel.count is stubbed in the before block, the  
> mock reports an unexpected message.  Note however the first example  
> passes.

The first example passes because "should_receive" acts as a stub, too.

The second example fails, because in the second example there is no  
stub for the count method.  I'd suggest adding this line to  
before(:each) (or to the start of each test case):

MyModel.stub!(:count).and_return 0


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20080725/80f93291/attachment.html>

More information about the rspec-users mailing list