Shane Mingins
2008-Oct-15 03:07 UTC
[rspec-users] Just a quick question on David''s new-controller-examples
http://blog.davidchelimsky.net/2008/7/1/new-controller-examples BTW .... great post, thanks :-) I was wondering the thinking of this one .... describe "responding to POST /accounts" do describe "with failed save" do it "should create a new account" do Account.should_receive(:new).with({''these'' => ''params''}).and_return(mock_account(:save => false)) post :create, :account => {:these => ''params''} end compared to the similar example in describe "with successful save". The expected behaviour seems the same and I wondered why it would not be pulled into just the responding to POST /accounts block? Cheers Shane Shane Mingins ELC Technologies (TM) 1921 State Street Santa Barbara, CA 93101 Phone: +64 4 568 6684 Mobile: +64 21 435 586 Email: smingins at elctech.com AIM: ShaneMingins Skype: shane.mingins (866) 863-7365 Tel - Santa Barbara Office (866) 893-1902 Fax - Santa Barbara Office +44 020 7504 1346 Tel - London Office +44 020 7504 1347 Fax - London Office http://www.elctech.com -------------------------------------------------------------------- Privacy and Confidentiality Notice: The information contained in this electronic mail message is intended for the named recipient(s) only. It may contain privileged and confidential information. If you are not an intended recipient, you must not copy, forward, distribute or take any action in reliance on it. If you have received this electronic mail message in -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4000 bytes Desc: not available URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081015/1ca35d23/attachment.bin>
Mark Wilden
2008-Oct-15 17:26 UTC
[rspec-users] Just a quick question on David''s new-controller-examples
I have a different question about the article (pity comments are closed). def mock_account(stubs={}) stubs = { :save => true, :update_attributes => true, :destroy => true, :to_xml => '''' }.merge(stubs) @mock_account ||= mock_model(Account, stubs) end With this helper, doesn''t @mock_account only get set once inside its ''describe'' block? Any future tests would use the same @mock_account, even if other stubs were designated. I''m probably missing something very obvious. ///ark -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081015/99831819/attachment.html>
Shane Mingins
2008-Oct-15 17:58 UTC
[rspec-users] Just a quick question on David''s new-controller-examples
Hi Mark Yeah I was looking at that later on too. And yes if you use in a ''before'' it does. Only setting in an ''it'' block is ok. I was using this as a quick test as we are on an older version of rspec and I was checking if it may have changed but this fails on 1.1.8 require File.expand_path(File.dirname(__FILE__) + ''/../spec_helper'') describe PersonController do def mock_person(stubs={}) @person ||= mock_model(Person, stubs) end describe "GET" do before(:each) do mock_person(:name => "fred") end it "should have name fred" do @person.name.should == "fred" end it "should have name steve" do mock_person(:name => "steve") @person.name.should == "steve" end end describe "POST" do it "should have name steve" do mock_person(:name => "steve") @person.name.should == "steve" end it "should have name bob" do mock_person(:name => "bob") @person.name.should == "bob" end end end 1) ''PersonController GET should have name steve'' FAILED expected: "steve", got: "fred" (using ==) ./spec/controllers/person_controller_spec.rb:21: Finished in 0.295898 seconds 6 examples, 1 failure On 16/10/2008, at 6:26 AM, Mark Wilden wrote:> I have a different question about the article (pity comments are > closed). > > def mock_account(stubs={}) > stubs = { > :save => true, > :update_attributes => true, > :destroy => true, > > :to_xml => '''' > }.merge(stubs) > @mock_account ||= mock_model(Account, stubs) > end > > > With this helper, doesn''t @mock_account only get set once inside its > ''describe'' block? Any future tests would use the same @mock_account, > even if other stubs were designated. > > I''m probably missing something very obvious. > > ///ark > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-usersShane Mingins ELC Technologies (TM) 1921 State Street Santa Barbara, CA 93101 Phone: +64 4 568 6684 Mobile: +64 21 435 586 Email: smingins at elctech.com AIM: ShaneMingins Skype: shane.mingins (866) 863-7365 Tel - Santa Barbara Office (866) 893-1902 Fax - Santa Barbara Office +44 020 7504 1346 Tel - London Office +44 020 7504 1347 Fax - London Office http://www.elctech.com -------------------------------------------------------------------- Privacy and Confidentiality Notice: The information contained in this electronic mail message is intended for the named recipient(s) only. It may contain privileged and confidential information. If you are not an intended recipient, you must not copy, forward, distribute or take any action in reliance on it. If you have received this electronic mail message in -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4000 bytes Desc: not available URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081016/3fce215d/attachment.bin>
David Chelimsky
2008-Oct-16 22:43 UTC
[rspec-users] Just a quick question on David''s new-controller-examples
On Wed, Oct 15, 2008 at 3:58 PM, Shane Mingins <smingins at elctech.com> wrote:> Hi Mark > > Yeah I was looking at that later on too. And yes if you use in a ''before'' > it does. Only setting in an ''it'' block is ok. > > I was using this as a quick test as we are on an older version of rspec and > I was checking if it may have changed but this fails on 1.1.8 > > require File.expand_path(File.dirname(__FILE__) + ''/../spec_helper'') > > describe PersonController do > > def mock_person(stubs={}) > @person ||= mock_model(Person, stubs) > end > > describe "GET" do > > before(:each) do > mock_person(:name => "fred") > end > > it "should have name fred" do > @person.name.should == "fred" > end > > it "should have name steve" do > mock_person(:name => "steve") > @person.name.should == "steve" > end > > end > > describe "POST" do > > it "should have name steve" do > mock_person(:name => "steve") > @person.name.should == "steve" > end > > it "should have name bob" do > mock_person(:name => "bob") > @person.name.should == "bob" > end > > end > > end > > > > 1) > ''PersonController GET should have name steve'' FAILED > expected: "steve", > got: "fred" (using ==) > ./spec/controllers/person_controller_spec.rb:21: > > Finished in 0.295898 seconds > > 6 examples, 1 failureAdmittedly, this is a violation of the principal of least surprise, but your analysis of the problem is not quite accurate. Each example is run in its own instance of the group (just like xUnit frameworks) and has its own state. before(:each) gets run, as it says, before each example in the context of its own instance of the group. So what''s happening is that the mock_person(:name => "fred") in the before is creating the instance, whereas the mock_person(:name => "steve") in the example is not actually creating a new object - it essentially does nothing :( I think that the mock_person method probably needs to be smarter so if it''s already been called AND it gets args it raises an error. WDYT?> > > > > > > On 16/10/2008, at 6:26 AM, Mark Wilden wrote: > >> I have a different question about the article (pity comments are closed). >> >> def mock_account(stubs={}) >> stubs = { >> :save => true, >> :update_attributes => true, >> :destroy => true, >> >> :to_xml => '''' >> }.merge(stubs) >> @mock_account ||= mock_model(Account, stubs) >> end >> >> >> With this helper, doesn''t @mock_account only get set once inside its >> ''describe'' block? Any future tests would use the same @mock_account, even if >> other stubs were designated. >> >> I''m probably missing something very obvious. >> >> ///ark >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > Shane Mingins > ELC Technologies (TM) > 1921 State Street > Santa Barbara, CA 93101 > > > Phone: +64 4 568 6684 > Mobile: +64 21 435 586 > Email: smingins at elctech.com > AIM: ShaneMingins > Skype: shane.mingins > > (866) 863-7365 Tel - Santa Barbara Office > (866) 893-1902 Fax - Santa Barbara Office > > +44 020 7504 1346 Tel - London Office > +44 020 7504 1347 Fax - London Office > > http://www.elctech.com > > -------------------------------------------------------------------- > Privacy and Confidentiality Notice: > The information contained in this electronic mail message is intended for > the named recipient(s) only. It may contain privileged and confidential > information. If you are not an intended recipient, you must not copy, > forward, distribute or take any action in reliance on it. If you have > received this electronic mail message in > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >