He creado una aplicación nueva (que adjunto) sólo con el código de mi
comentario anterior y con el transfer_test.rb de [4].
Aunque en los últimos comentarios no lo he dejado muy claro, realmente
sà que valida pero no añade el error, como comentaba en el segundo
comentario:
Una cosa más. ¿Son necesarias las siguientes lineas para que aparezca el
error?
errors.add(:receiver,"…") if receiver.nil?
errors.add(:sender,"…") if sender.nil?
¿o validates_presence_of ya lo hace? SuponÃa que serÃa asÃ, pero
testeando sólo me aparece si lo añado explÃcitamente con errors.add en
el método validate [3].
Es decir, assert !t.valid? va bien (no crea la transfer) pero assert
t.errors.invalid?(:sender) no (a no ser que incluya explÃcitamente el
método validate, según [5]). En cambio, con amount sà que incluye el
error (si creamos la transferencia sin :amount).
¿Alguna idea de qué hago mal? Gracias de nuevo.
[4]
def setup
@user=User.create
@userB=User.create
end
def test_not_create_transfer_if_params_missing
check_not_create_transfer_if_missing(:amount)
check_not_create_transfer_if_missing(:receiver)
check_not_create_transfer_if_missing(:sender)
#Temp:
t=Transfer.create(:amount=>3.4, :sender=>@user, :receiver=>@userB)
assert t.valid?
t=Transfer.create(:amount=>3.4)
assert !t.valid?
assert t.errors.invalid?(:sender)
end
[5]
class Transfer < ActiveRecord::Base
belongs_to :receiver,
:class_name => “User” ,
:foreign_key => “receiver_id”
belongs_to :sender,
:class_name => “User” ,
:foreign_key => “sender_id”
validates_presence_of :receiver_id, :sender_id, :amount
protected
def validate
super
errors.add(:receiver,"…") if receiver.nil?
errors.add(:sender,"…") if sender.nil?
errors.add(:amount, “…”) if amount.nil? || amount < 0.01
end
end