[rspec-users] Help with global before behavior...

David Chelimsky dchelimsky at gmail.com
Fri May 8 17:57:07 EDT 2009


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
>


More information about the rspec-users mailing list