Tengo un modelo como este:¿Cómo probar qué validación falló en ActiveRecord?
class User < ActiveRecord::Base
validates_length_of :name, :in => (2..5)
end
Quiero poner a prueba esta validación:
it "should not allow too short name" do
u = User.new(:name => "a")
u.valid?
u.should have(1).error_on(:name)
end
Pero entonces no prueba qué tipo de error se encuentra en name
. Quiero saber si fue too_short
, too_long
, o tal vez falló alguna otra validación.
que puede buscar el texto del mensaje en errores matriz, así:
u.errors[:name].should include(I18n.t("activerecord.errors.models.user.attributes.name.too_short"))
Pero esto se producirá un error cuando me puse activerecord.errors.messages.too_short
en el archivo local en lugar de mensaje específica del modelo.
Entonces, ¿es posible verificar qué tipo de error ocurrió?
agregado? es un método útil. Combinado con la sintaxis rspec esto podría hacer que se lea muy bien. P.ej. 'expect (record.errors) .to be_added: name,: blank' – PhilT
Tenga en cuenta que debe pasar opciones como el tercer parámetro para algunas comprobaciones. por ejemplo, 'assert record.errors.added? (: slug,: too_short, count: 5)' donde 5 es la longitud requerida. –
Tenga en cuenta que esta solución solo funciona para validaciones de modelo. Agregar errores arbitrarios no se puede verificar con '#added?' Por ejemplo, '#added?' Arrojará un error si se busca un error si ': name' o': email' en el ejemplo anterior no es un atributo de modelo. – sealocal