[rspec-users] Getting past my login system

Ryan Tucker rctucker at u.washington.edu
Mon Jul 16 20:43:38 EDT 2007

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

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 => []

describe StudentsController do
  it "should be successful" do
    get :index
    response.should be_success

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!


More information about the rspec-users mailing list