[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