Tengo un modelo de usuario y un modelo de amistad.validates_associated y validates_presence_of no funciona como se esperaba con rspec?
class Friendship < ActiveRecord::Base
belongs_to :sender, :class_name=>'User', :foreign_key=>'sender_id'
belongs_to :receiver, :class_name=>'User', :foreign_key=>'receiver_id'
validates_presence_of :receiver_id, :sender_id
validates_associated :receiver, :sender
end
class User < ActiveRecord::Base
has_many :sent_friendships, :class_name => "Friendship", :foreign_key => "sender_id", :dependent => :destroy
has_many :received_friendships, :class_name => "Friendship", :foreign_key => "receiver_id", :dependent => :destroy
end
y uno de mis rspec prueba es
describe Friendship do
before(:each) do
@valid_attributes = {
:sender_id => 1,
:receiver_id => 2,
:accepted_at => nil
}
end
it "should not be valid with non-existant receiver_id" do
f = Friendship.new(@valid_attributes)
f.receiver_id = 99999
f.should_not be_valid
end
end
La prueba no debería ser válido, porque no hay ningún usuario con user_id 9999. Pero la prueba es decir la amistad en el modelo es válido.
¿Por qué demonios?
EDIT:
Pero quiero probar como se ha mencionado -> sin asignar directamente al remitente. ¿No es eso posible?
documentación
No hace la diferencia. Funciona en consola, no funciona con pruebas (al menos no cuando se usan dispositivos) – Espen
AFAIK, validates_presence_of en un nombre de asociación solo funciona como se espera cuando el objeto es un nuevo registro. Si está recuperando un dispositivo existente de db y modificando receiver_id directamente, esta prueba fallará a menos que primero configure el receptor como nulo. –