Okay, I guess I can do this with shared examples. I added to my spec_helper.rb: describe "an admin user is signed in", :shared => true do before( :each ) do @admin_user = Factory(:admin_user) login_as @admin_user end end and then in each controller that needs that behavior: it_should_behave_like "an admin user is signed in" Good enough. I had myself going in circles because I was trying to use a :type and global before behavior, and I think that doesn''t work at all how I was expecting it to. Can :type be anything? Or is it limited to some set of values (e.g. :controller, etc)? Thanks, dwh Denis Haskin wrote:> I''m having a devil of a time getting some global before behavior to > work the way I think it should. > > I have a set of controllers that are used only by administrative > users, so login is required. To run examples just against the > functionality, ideally I''d like to be able to set up a before() that > would log an admin user in before each example. > > I tried putting it in as a global in spec_helper.rb: > > Spec::Runner.configure do |config| > ...etc... > config.before(:each) do > @admin_user = Factory(:admin_user) > login_as @admin_user > end > ...etc... > > but it really seems like it''s being executed in the configure context, > not the controller context (for example, session[] isn''t defined yet, > etc). > > Any recommendations? > > Thanks, > > dwh > > ------------------------------------------------------------------------ > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
On Fri, May 8, 2009 at 1:51 PM, Denis Haskin <denis at haskinferguson.net> wrote:> Okay, I guess I can do this with shared examples. ?I added to my > spec_helper.rb: > > describe "an admin user is signed in", :shared => true do > ?before( :each ) do > ? @admin_user = Factory(:admin_user) > ? login_as @admin_user > ?end > end > > and then in each controller that needs that behavior: > > ?it_should_behave_like "an admin user is signed in" > > Good enough. ?I had myself going in circles because I was trying to use a > :type and global before behavior, and I think that doesn''t work at all how I > was expecting it to. > > Can :type be anything? ?Or is it limited to some set of values (e.g. > :controller, etc)?:type is the type of group (model, view, controller, etc). We''re going to be adding some sort of tagging thing eventually where you''d be able to set something up in config that you could later hook w/ a hash passed to describe or it, but that won''t be for a bit. Your solution seems like a fine option, given the current constraints. Another thing you could do is make it a macro, so you could say: describe "something" do logged_in_as :admin do it "should behave this way" do ... end end logged_in_as :anonymous do it "should behave differently" do .. end end end Depends on what you find more expressive. Cheers, David> > Thanks, > > dwh > > > Denis Haskin wrote: >> >> I''m having a devil of a time getting some global before behavior to work >> the way I think it should. >> >> I have a set of controllers that are used only by administrative users, so >> login is required. ?To run examples just against the functionality, ideally >> I''d like to be able to set up a before() that would log an admin user in >> before each example. >> >> I tried putting it in as a global in spec_helper.rb: >> >> Spec::Runner.configure do |config| >> ...etc... >> ?config.before(:each) do >> ? ?@admin_user = Factory(:admin_user) >> ? login_as @admin_user >> ?end >> ...etc... >> >> but it really seems like it''s being executed in the configure context, not >> the controller context (for example, session[] isn''t defined yet, etc). >> >> Any recommendations? >> >> Thanks, >> >> dwh >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Denis Haskin wrote:> I''m having a devil of a time getting some global before behavior to > work the way I think it should. > > I have a set of controllers that are used only by administrative > users, so login is required. To run examples just against the > functionality, ideally I''d like to be able to set up a before() that > would log an admin user in before each example. > > I tried putting it in as a global in spec_helper.rb: > > Spec::Runner.configure do |config| > ...etc... > config.before(:each) do > @admin_user = Factory(:admin_user) > login_as @admin_user > end > ...etc... > > but it really seems like it''s being executed in the configure context, > not the controller context (for example, session[] isn''t defined yet, > etc).Here''s how I do it w/ Flavorpill: Spec::Runner.configure do |config| Spec::Rails::Example::ControllerExampleGroup.class_eval do include SpecHelpers::AdminLoginHelper before(:each) do setup_action end end end Scott> > Any recommendations? > > Thanks, > > dwh > > ------------------------------------------------------------------------ > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users