I’m trying to run some functional tests for actions that are behind
authentication (via act as authenticated plugin), but am having
problems getting “current_user” set for the controller.
Here’s the test code:
def test_create
num_notes = Note.count
post :create, :note => {:title => "Test Note", :msg => "Test
Message" }
assert_response :redirect
assert_redirected_to :action => ‘list’
assert_equal num_notes + 1, Note.count
end
Here’s the contoller code that it is failing:
@note.user_id = current_user.id
I’ve added this include to the first line of the test class:
include AuthenticatedTestHelper
In the setup function I’ve added:
login_as :jeremy
There is a user in the fixure with the login of “jeremy”. So what am
I doing wrong?
I found that the default “authenticated_test_helper.rb” file was
throwing an error about the “users” method being undefined with the
following function:
def login_as(user)
@request.session[:user] = user ? users(user).id : nil
end
So I changed it to this:
def login_as(user)
@request.session[:user] = user ? User.find_by_login(user) : nil
end
This seemed to fix the problem. Is this an OK modification to make?
Why didn’t the code that it shipped with work?
Mozmonkey wrote:
I found that the default “authenticated_test_helper.rb” file was
throwing an error about the “users” method being undefined with the
following function:
And you are using the out-of-the-box fixtures system, with fixtures
:users
above every call to login_as?
This seemed to fix the problem. Is this an OK modification to make?
sessions should only contain numbers (for various definitions of
“should”),
so you are missing an .id
Why didn’t the code that it shipped with work?
Works for me. How sure are you that this assertion would pass before
your
login_as?
assert_not_nil users(:jeremy)
Then, I suspect something reconstitutes current_user at page hit time,
via
User.find_by_id(session[:user])
Storing entire objects in your session table is bad JuJu.
–
Phlip
http://www.oreilly.com/catalog/9780596510657/
“Test Driven Ajax (on Rails)”
assert_xpath, assert_javascript, & assert_ajax