Hola a todos
Primero quiero saludar al foro puesto que es mi primer mensaje.
Una vez presentado :), quisiera preguntaros un asunto relacionado con
los test en rails (SÃ, aquà hay uno que ha empezado a hacer tests).
Tengo un modelo llamado User en el que he utilizado before_save para
cifrar la clave del usuario antes de guardarlo:
class User < ActiveRecord::Base
[…]
before_save :encrypt_password
[…]
protected
def encrypt_password
if !password.blank?
self.hashed_password = User.hash_password(password)
end
end
[…]
end
He empezado a hacer un test, y me gustarÃa probar que el modelo realiza
el cambio de clave del usuario correctamente. En uno de los test tengo
lo siguiente:
def test_password_management
[…]
@user.password = “newpw”
@user.password_confirmation = “newpw”
assert(@user.valid?)
end
Este assert lo que comprueba es que el usuario ha pasado correctamente
las validaciones. Pero también me gustarÃa es comprobar que hace el
cifrado de la nueva clave. TendrÃa que ser algo asÃ.
[…]
assert_equal(@user.hashed_password,“95c4c0b728c563a1ddab068ea2166e983eedd528”)
[…]
Pero este assert solo será valido si hago un @user.save, el caso es que
creo que en una versión anterior de rails se utilizaba transacciones
entre los diferentes test, pero que por cuestiones de rendimiento ya no
es asÃ. Si salvo los datos a la base de datos, entonces podrÃa llegar a
tener unos tests que sean dependientes de otros y del orden en que se
ejecuten.
No se muy bien como deberÃa hacer esta comprobación. He probado a hacer
un @user.before_save, pero no ha resultado. Alguna idea serÃa agradecida
Me ha quedado un poco largo, gracias por adelantado.
saludotes