Test funcional, actualizando modelo desde controlador

Hola,

Estoy teniendo problemas en los tests funcionales cuando intento
actualizar un modelo desde un controlador[1]. Estoy probándolo en una
aplicación recién creada, que sólo dispone del modelo user y el
controlador users, creados con el scaffold_resource [2].

En el test.log podemos ver como sí se ha modificado el usuario [3] al
final del método update del controlador [4]. Sin embargo, cuando vuelve
al test funcional, @user.name mantiene el valor antiguo. ¿Alguien puede
decirme qué hago mal? Gracias.

[1]
def test_should_update_user_name
@user=User.create(:name=>“nombre_inicial”)
put :update, :id => @user.id, :user => {:name=>“no_va”}
assert_redirected_to user_path(assigns(:user))
assert_equal “no_va”,@user.name # <-- NO
VA
end

  1. Failure:
    test_should_update_user_name(UsersControllerTest)
    [test/functional/users_controller_test.rb:55]:
    <“no_va”> expected but was
    <“nombre_inicial”>.

[2]
rails prueba
cd prueba
ruby script/generate scaffold_resource user name:string

[3]
Processing UsersController#update (for 0.0.0.0 at 2007-09-13 19:43:10)
[PUT]
Session ID:
Parameters: {“user”=>{“name”=>“no_va”}, “action”=>“update”,
“id”=>“66”, “controller”=>“users”}
User Load (0.000245) SELECT * FROM users WHERE (users.id = 66)
User Update (0.000223) UPDATE users SET name = ‘no_va’ WHERE id
= 66
Redirected to http://test.host/users/66

User Update (0.000206) UPDATE users SET name = ‘no_va’ WHERE id
= 66
true
no_va
Completed in 0.00427 (233 reqs/sec) | DB: 0.00166 (38%) | 302 Found
[http://test.host/users/66?user=nameno_va]
SQL (0.044350) ROLLBACK

[4]

PUT /users/1

PUT /users/1.xml

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

respond_to do |format|
  if @user.update_attributes(params[:user])
    flash[:notice] = 'User was successfully updated.'
    format.html { redirect_to user_url(@user) }
    format.xml  { head :ok }
  else
    format.html { render :action => "edit" }
    format.xml  { render :xml => @user.errors.to_xml }
  end
end
logger.debug("---------------------")
logger.debug(@user.save)
logger.debug(@user.name)

end

Antes del assert_equal de [1] haz un @user.reload para que vuelva a
leer el objeto user de la base de datos con los atributos
“refrescados”.

Un saludo.

Gracias Blat :wink:

Fernando B. wrote:

Antes del assert_equal de [1] haz un @user.reload para que vuelva a
leer el objeto user de la base de datos con los atributos
“refrescados”.

Un saludo.

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