[rspec-devel] [ rspec-Bugs-12547 ] validates_each issue in rails with mocking and stubbing

noreply at rubyforge.org noreply at rubyforge.org
Wed Aug 22 08:35:58 EDT 2007


Bugs item #12547, was opened at 2007-07-24 15:17
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=3149&aid=12547&group_id=797

Category: rails plugin
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Daniel Neighman (hassox)
Assigned to: Nobody (None)
Summary: validates_each issue in rails with mocking and stubbing

Initial Comment:
I've been trying some code that checks for a validates_each call in an AR model.

The spec:
http://pastie.caboo.se/81744

This produces the following error:

does not detect that two responses are equal

Mock 'Book_1027' expected :store_with_privacy? with (#<Clip:0x1a9139c @name="Clip_1025">) but received it with (#<Clip:0x1a9139c @name="Clip_1025">)

and

stub overwrites mock

Mock 'Book_1026' expected :store_with_privacy? with (#<Clip:0x1a91b1c @name="Clip_1025">) once, but received it 0 times

The Model is:
http://pastie.caboo.se/81745


----------------------------------------------------------------------

>Comment By: David Chelimsky (dchelimsky)
Date: 2007-08-22 12:35

Message:
I'm on to something, but haven't gotten there yet.

Modifying the example in the pastie, the following passes:

    @book.should_receive(:can_store?) do |clip|
      @clip.object_id.should == clip.object_id
    end

But the following fails:

    @book.should_receive(:can_store?) do |clip|
      @clip.should == clip
    end

And this fails:

    @book.should_receive(:can_store?) do |clip|
      @clip.should equal(clip)
    end

I added specs for mocks and mock_models:

@mock.should == @mock
@mock.should equal(@mock)

@mock_model.should == @mock_model
@mock_model.should equal(@mock_model)

They all pass.

Here's my theory:

model.book.clip is not actually the clip object, but a Rails Association Proxy and it is not responding as you would expect to == or equal?.

Anybody else paying attention to this thread think that's a reasonable theory?

----------------------------------------------------------------------

Comment By: Daniel Neighman (hassox)
Date: 2007-08-22 07:24

Message:
Hi,

Thanx for looking at this David.  I've been away from my
machine.  I will zip it up and email it to you.

-Daniel

----------------------------------------------------------------------

Comment By: David Chelimsky (dchelimsky)
Date: 2007-08-22 05:38

Message:
Michael - The issue you described was specific to the way expect_render and stub_render delegated to a mock proxy (or to the the real method).

I've fixed that (see http://rubyforge.org/tracker/index.php?func=detail&aid=13271&group_id=797&atid=3149),
but I don't think it's related to this problem, which Daniel is seeing in model specs.

Daniel - I'll throw my request to you again - I'm having trouble reproducing the original problem in this report - it would help if you could give me a patch or a failing spec or an entire project that I can just apply, unzip, whatever, and go.

Cheers,
David

----------------------------------------------------------------------

Comment By: David Chelimsky (dchelimsky)
Date: 2007-08-22 01:03

Message:
Thanks Michael - patching rspec's own specs definitely makes it easy for me to see the problem you're trying to convey.

----------------------------------------------------------------------

Comment By: Michael Hamann (michitux)
Date: 2007-08-22 00:51

Message:
I just added an expectation in rspec_on_rails that shows the problem, here the diff: http://pastie.caboo.se/89880 - I hope that is enough and helps.

----------------------------------------------------------------------

Comment By: David Chelimsky (dchelimsky)
Date: 2007-08-22 00:41

Message:
Daniel - I started to look at this, but due to the dependencies on other models couldn't really get anything going w/o making some assumptions.

If you would wrap up your project in a zip and either post it here or email me directly, I'll be glad to take a look at it. I just need to be able to unzip a file, create a db, run migrations and go.


----------------------------------------------------------------------

Comment By: David Chelimsky (dchelimsky)
Date: 2007-08-22 00:28

Message:
Michael - would you mind posting your spec please? Maybe a pastie.

----------------------------------------------------------------------

Comment By: Michael Hamann (michitux)
Date: 2007-08-22 00:19

Message:
The problem that stub overwrites should_receive/expect occurs also in view-specs with template.stub_render and template.expect_render. Example: I have a partial that is rendered in a template. I test several things where I don't want to pay any attention to this partial. But then I want to test that the partial is actually rendered. Unfortunately this doesn't work. I am using rspec_on_rails revision 2419.

----------------------------------------------------------------------

Comment By: Daniel Neighman (hassox)
Date: 2007-07-24 15:38

Message:
The migrations are here
http://pastie.caboo.se/81756

----------------------------------------------------------------------

Comment By: David Chelimsky (dchelimsky)
Date: 2007-07-24 15:29

Message:
Would you mind posting the relevant migrations as well? Then I can build a subset of your app and see the error happen.

----------------------------------------------------------------------

Comment By: Daniel Neighman (hassox)
Date: 2007-07-24 15:23

Message:
A bit more information

I have rspec installed as plugins in rails

rspec 2174
rspec_on_rails 2174

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=3149&aid=12547&group_id=797


More information about the rspec-devel mailing list