David Chelimsky
2009-Apr-27 20:27 UTC
[rspec-users] cucumber/webrat, need to set user in session, can''t stub or mock. Fixtures?
On Mon, Apr 27, 2009 at 3:09 PM, doug livesey <biot023 at gmail.com> wrote:> Hi -- I''m assuming that there are excellent reasons for not enabling stubs & > mocks in cucumber, but I find myself in a bit of a pickle without them.Aslak and I were discussing this very thing earlier today. There are definitely good reasons not to use message expectations (mocks - see http://wiki.github.com/aslakhellesoy/cucumber/mocking-with-cucumber) in cucumber, but stubs are different and we''re thinking there should be support for them. I haven''t tried this, but you should be able to do what RSpec does to adapt to different mock/stub frameworks. To use rspec''s, for example, you should be able to say: require ''spec/mocks/framework'' require ''spec/mocks/extensions'' World(Spec::Mocks::ExampleMethods) Before do $rspec_stubs ||= Spec::Mocks::Space.new end After do $rspec_stubs.reset_all end Now you *should* have the same mocking/stubbing methods you do in rspec examples in cucumber step definitions, and the stubs get cleared out after each scenario. See if that works, and then maybe we can figure out a way to generalize rspec''s mock-framework-adapter framework so cucumber can use it as well (so you''d be able to stub w/ mocha, rr, flexmock, or any other). Cheers, David> Basically, I want to write a feature that has the home page displaying if > there is a logged in user (identified by a call to current_user, which in > turn checks session[:user_id]), and that displays an unauthorised access > page if there isn''t. > I guess normally, I''d have webrat walk through my app, including logging in? > Unfortunately, the login doesn''t happen in this application, though. It > happens in another that shares state with this one, so I can''t do this. > Could someone advise how I can set up my scenario so that there is a valid > user either in the session, or stubbed from the current_user? > Would this be something to do with fixtures? > If so, could someone point me at some docs that show me how to use them with > cucumber? > Thanks for any & all help, > ?? Doug. > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
David Chelimsky
2009-Apr-27 20:40 UTC
[rspec-users] cucumber/webrat, need to set user in session, can''t stub or mock. Fixtures?
On Mon, Apr 27, 2009 at 3:39 PM, doug livesey <biot023 at gmail.com> wrote:> Cheers for that -- I''ll give it a try. > Would all of that be in the step file?Please be sure to clip the relevant parts when responding - "all of that" is only meaningful if I look at the other email in this thread. Easy on my desk top. Not so easy on my phone. Try support/env.rb. Cheers, David> (Total cucumber newbie, sorry!) > Cheers, > ?? Doug. > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Zach Dennis
2009-Apr-27 21:34 UTC
[rspec-users] cucumber/webrat, need to set user in session, can''t stub or mock. Fixtures?
On Mon, Apr 27, 2009 at 5:24 PM, doug livesey <biot023 at gmail.com> wrote:> Refactoring the current_user method a little, then stubbing the find method > in there did it. > > # ApplicationController > def current_user > ? User.find( session[:user_id] ) rescue nil > end > > # Scenario step > Given /^that a user is logged in to the session$/ do > ? User.stub!( :find ).and_return( true ) > endYou probably want to return a User, no? Returning true is entirely different than the normal find API w/ActiveRecord. It seems to be misleading and I can see where it would cause problems where controller or view code that relies on #current_user expects a User,> > Cheers, > ?? Doug. > > 2009/4/27 doug livesey <biot023 at gmail.com> >> >> Except I''m now struggling with how it should work, sorry. >> The step for the scenario looks like this: >> >> Given /^that a user is logged in to the session$/ do >> ? controller.stub!( :current_user ).and_return( true ) >> end >> >> However, when I try to puts the value of current_user as called from the >> ApplicationController#authorise method, it returns nil. >> I''ve tried just stubbing out the authorise method, too, but that doesn''t >> seem to work, either. >> Am I approaching this the wrong way? >> & cheers again, >> ?? Doug. >> >> 2009/4/27 doug livesey <biot023 at gmail.com> >>> >>> & that nailed it, cheers man! >>> ?? Doug. >>> >>> 2009/4/27 doug livesey <biot023 at gmail.com> >>>> >>>> > Please be sure to clip the relevant parts when responding - "all of >>>> > that" is only meaningful if I look at the other email in this thread. >>>> > Easy on my desk top. Not so easy on my phone. >>>> >>>> Bit too used to gmail threads, sorry! >>>> ?? Doug. >>> >> > > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >-- Zach Dennis http://www.continuousthinking.com (personal) http://www.mutuallyhuman.com (hire me) @zachdennis (twitter)