[rspec-users] Getting past my login system

Scott Taylor mailing_lists at railsnewbie.com
Tue Jul 17 01:53:59 EDT 2007

You'll probably want to stub the method 'find' on the user class,  
with a user mock:

before :each do
   @user = mock_model User
   User.stub!(:find).and_return @user

Then you can do the post on the controller you are spec'ing

You should also search the mailing list - this question has been  
asked numerous times, in various forms.  If none of those applies,  
let us know how it is different.


Scott Taylor

On Jul 16, 2007, at 8:43 PM, Ryan Tucker wrote:

> Thank you in advance for your help.  I am relatively new to both Rails
> and Rspec and I am hoping for some insight from some experienced  
> veterans.
> Right now I am using Rspec for code that has already been written so
> that additional functionality can be developed using the BDD  
> method. My
> problem shows up when I try to spec controllers that are behind the
> login system.  Each page checks for the session[:user], and if they do
> not exists, requires them to login.  Logging in is handled by one
> controller (the Admin controller) and I want to access a page under
> another controller (say a Students controller).
> In my students_controller_spec.rb, I want want to make sure
> http://test.host/students is successfully displayed, so I wrote
> something like:
>   it "should be successful" do
>     get :index
>     response.should be_success
>   end
> The problem is that is keeps redirecting to my login page at
> http://test.host/login.  I tried then setting session[:user] and  
> doing a
> post to my login page to simulate a login so that I could access the
> correct page, but that does not seem to work.  I tried a number of
> things, including the following:
> def do_login
>   @user = User.find(:first, :conditions => ['username = ?' , 'ryan'] )
>   session[:user] = @user.id
>   post :login, :path => []
> end
> describe StudentsController do
>   it "should be successful" do
>     do_login
>     get :index
>     response.should be_success
>   end
> end
> This still results in being redirected to the login page at
> http://test.host/login when I want to go to http://test.host/students.
> Also, I realize I am actually doing a call on my test database for
> this.  Part of the reason is that code that called during login checks
> fields of a user.  The other reason is I could not get it to work  
> using
> stubs, but that might just have been because I was not using them  
> properly.
> Any insight will be helpful, thanks!
> -Ryan
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

More information about the rspec-users mailing list