Replicating Form Behaviour in Functional Test


I’m really struggling getting a controller test to pass while the form
that uses the method operates correctly.

I would really welcome a second pair of eyes to help me find out what
I’m missing.

The test

def test_set_password
@request.session[:user] = users(:admin)

put :set_password, :id => users(:one).id, :user => {:password =>

“newpass”, :password_confirmation => “newpass”}

assert User.authenticate(users(:one).username, "newpass")
assert_redirected_to user_path(assigns(:user))


The controller method


def set_password
@user = User.find(params[:id])

respond_to do |format|
  if @user.update_attributes(params[:user])
    flash[:notice] = 'Password updated.'
    format.html { redirect_to(@user) }
    format.xml  { head :ok }
    format.html { render :action => "edit_password" }
    format.xml  { render :xml => @user.errors, :status

=> :unprocessable_entity }

The view: edit_password.html.erb

<%= error_messages_for :user %>

<%= @user.username%>

<% form_for @user, :url => {:id =>, :action =>
“set_password”} do |f| %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation %>

<%= submit_tag "Change" %>

<% end %>

<%= link_to ‘Back’, @user %>

The view works but the test fails.

Thanks in advance,


On 5 Dec 2008, at 14:02, Adam wrote:

The view works but the test fails.

You need to work out why. stick a breakpoint in the action (or in
whatever before filters may be relevant) and see what happens


OK, thanks Fred. I guess it’s nothing obvious which is sort of


On Dec 5, 3:27 pm, Frederick C. [email protected]

On Dec 6, 12:59 pm, Adam [email protected] wrote:

OK, thanks Fred. I guess it’s nothing obvious which is sort of

Well there is one thing that I refrained from commenting upon because
I’ve no idea how you do your authentication, but in my apps

@request.session[:user] = users(:admin)

would be

@request.session[:user] = users(:admin).id

But that should be quite obvious if you look at test.log (it would say
that processing was halted because the authorization filter redirected
or rendered)


OK, thanks for that advice.

It’s not the problem the test is railing on the first assertion. It’s
the update of the user record that’s failing for some reason.


On Dec 6, 1:08 pm, Frederick C. [email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs