Bookmarked for later research -- cheers for pointing that out! 2009/4/29 Chris Flipse <cfli...@gmail.com>
> I have a subapp that authenticates remotely, and pulls information from the > main app using ActiveResource, and a token provided in a cookie, which > sounds at least close to what you're trying to test > > While it's possible to stub the values coming back, it can be tricky. By > definition, you pretty much don't have access to the exact instance of a > controller class, so stubbing controller.current_user just won't work ... > plus, that exercises pretty much none of the authentication code. > > What I've taken too lately is making sure that my authentication code is > really well separated, even from my ActiveResource model. at that point, in > my integration tests, I drop a stub object into the authentication code, in > place of the Active Resource, and my Givens set up return values for that > stub object ... (stub in the it's a fake sense, not stub in the literal > RSpec object sense) > > All that said, a couple of days ago, I caught wind of this little gem: > http://fakeweb.rubyforge.org/ (and, of course, I can't remember who > pointed it out ... might have been someone on this list, might have been > someone on twitter ...) > It looks like it cuts directly in front of the core HTTP library, and lets > you register fake responses to the request. Using that, can probably just > skip the above, and fake a response from the remote system ... acutally > leaving the ActiveResource model in the system, and therefore, tested.... > Just havn't had that chance yet > > > > > On Tue, Apr 28, 2009 at 7:55 AM, doug livesey <biot...@gmail.com> wrote: > >> Further to this, here is what I am currently doing. >> I installed the seed-fu plugin and wrote a method in my env.rb file like >> this: >> >> # >> # Load fixtures by tableised names. >> # >> def seed_fixtures( *fixtures ) >> ActiveRecord::Base.establish_connection( >> ActiveRecord::Base.configurations['test'] ) >> ActiveRecord::Schema.verbose = false >> >> fixtures.each do |fixture| >> load( File.join( RAILS_ROOT, "db/fixtures/test", "#{ fixture }.rb" ) ) >> end >> end >> >> So in any Given that requires my fixtures, I can call "seed_fixture >> :my_first_models, :my_second_models" to load up anything I need for my >> cucumber steps. >> And the examle above called "seed_fixtures :users", and returned a user, >> not just a true value. >> >> Cheers, >> Doug. >> >> 2009/4/27 doug livesey <biot...@gmail.com> >> >>> Yeah, I take your point, but I would need to set that up with fixtures, >>> wouldn't I? >>> & really I guess I should be seeding the session with a User id & letting >>> all of the code do its work, not just stubbing the find method on >>> ActiveRecord. >>> I'll have a think on it -- for the moment it's quick & uncomplicated, and >>> I think that current_user returning true is fairly self-explanatory -- maybe >>> returning :a_logged_in_user would be less evil. >>> & my attitude there might have more to do with the time here being a >>> half-hour off of midnight than conscientiousness! ;) >>> Doug. >>> >>> 2009/4/27 Zach Dennis <zach.den...@gmail.com> >>> >>> On Mon, Apr 27, 2009 at 5:24 PM, doug livesey <biot...@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 ) >>>> > end >>>> >>>> You 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 <biot...@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 <biot...@gmail.com> >>>> >>> >>>> >>> & that nailed it, cheers man! >>>> >>> Doug. >>>> >>> >>>> >>> 2009/4/27 doug livesey <biot...@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@rubyforge.org >>>> > http://rubyforge.org/mailman/listinfo/rspec-users >>>> > >>>> >>>> >>>> >>>> -- >>>> Zach Dennis >>>> http://www.continuousthinking.com (personal) >>>> http://www.mutuallyhuman.com (hire me) >>>> @zachdennis (twitter) >>>> _______________________________________________ >>>> rspec-users mailing list >>>> rspec-users@rubyforge.org >>>> http://rubyforge.org/mailman/listinfo/rspec-users >>>> >>> >>> >> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > > > > -- > // anything worth taking seriously is worth making fun of > // http://blog.devcaffeine.com/ > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users