functional testing with restful authentication

I am having trouble getting functional tests to working with restful

I have tried this:
require File.dirname(__FILE__) + '/../test_helper'
require 'users_controller'

class UsersControllerTest < ActionController::TestCase

  def setup
    @controller =
    @request =
    @response =

  # this works fine (which it should)
  def test_truth
    assert true

  def test_get_index
    login_as(:someone) # 'someone' is set up in the users_fixture yaml
    get :index
    assert_response :success


The test_get_index function fails. It can't access the current_user
object. It tries to check the authentication, which I have set up in the
ApplicationController and it says nil.check_authentication is failing,
and it should be current_user.check_authentication.

Anyone know how to get current_user to work within functional tests?

Well, I couldn't find a solution to this, so I decided to rip out all
the current_<user_model_name> from authenticated_systems module and add
it to the application controller and made a similar function in
application helper. This did the trick, so now any tests I run will

Funny, I struggled with this yesterday.

How is your authentication set up?

Mine is RESTful as well and I have a SessionsController. Its create
action logs the user in.

The way I handled it was to put a setup method in my test_helper.rb

as follows:

def setup
@request =
@response =
controller = @controller
@controller =
post :create, { :login => “valid_username”, :password => “valid_password” }

@controller = controller


If you defined setup in any of your functional tests, just make sure you
do a call to super so that this will get called.

Hope this helps.


In my lib/authenticated_test_helper.rb , I have :

module AuthenticatedTestHelper
  # Sets the current user in the session from the user fixtures.
  def login_as(user)
    @request.session[:user_id] = user ? users(user).id : nil

  def authorize_as(user)
    @request.env["HTTP_AUTHORIZATION"] = user ?
'test') : nil

in my functionals tests, I only write (as an example..)
login_as(:xxx) xxx is the fixture name of a user.....

class ResidencesControllerTest < ActionController::TestCase
  fixtures :residences
  def setup
    @controller =
    @request =
    @response = = "localhost"

  def test_god_should_not_get_index
    login_as (:god)
    get :index
    assert_redirected_to dashboard_path