En algunas aplicaciones Rails, usualmente las que crecen sin una buena planificación, se pueden encontrar registros (Records) con validaciones que no manejan los errores de manera adecuada.
Un primer paso para evaluar la existencia de este tipo de validaciones en una aplicación legacy puede ser un test que verifique que .new.save
en los distintos records no levante excepciones; recordemos que la intención de las validaciones es agregar errores al modelo en cuestión.
Para esto podemos usar este pequeño snippet:
RSpec.describe do
ApplicationRecord.descendants.map do |klass|
it "#{klass}.new.save should not raise an error" do
expect { klass.new.save }.not_to raise_error
end
end
end
Si quisieramos asegurar este comportamiento modelo a modelo, podemos usar el siguiente shared_example
:
RSpec.shared_examples 'new record does not raise on save' do
it 'does not raise an error when saving an empty record' do
expect { described_class.new.save }.not_to raise_error
end
end
Recomiendo usar estas técnicas en proyectos legacy para identificar potenciales modelos descuidados, y corregir los eventuales errores que pueden existir en las validaciones de estos.