factory girl
factory girl es una gema para tener fixtures – supuestamente más simples y sólidas – vamos a ver.
para usarla en Rails hay que ponerla en el grupo test del Gemfile
group :test do gem 'factory_girl_rails' end
a pesar que en factory-girl-rails hablan de configurar algo en application.rb >> al parecer ésto se puede saltar.
factories
están por defecto en test/factories/xxx_factory.rb y adivinan el objeto del nombre que le demos >>
FactoryGirl.define do factory :user do first_name "John" last_name "Doe" admin false end end
en este ejemplo se asignan valores escalares a atributos del objeto.
se recomienda que sean los mínimos necesarios para instanciar la clase.
Luego dentro de un test se instancias los objetos así
user = FactoryGirl.build(:user)
… aún no veo la diferencia con las fixtures normales.
ah sí, que además de build hay métodos create (lo graba) update_attributes (devuelve un hash), etc.
¿Y?
lazy attributes
ésto es más interesante: se pueden definir atributos que se evalúan en tiempo de ejecución. por ej., asociaciones entre modelos – justo lo que falta en Test::Unit.
éstos se declaran en bloques de código
FactoryGirl.define do factory :user do activation_code { User.hacer_algo_bacan } fecha_nacimiento { 25.years.ago } end end
aunque no tengo 100% claro como se manejan las asociaciones.
sería
factory :post do association :author, factory: :user end
en caso que no se llamen igual, o en caso que el atributo de tipo user efectivamente se llama user
factory :post do user end
¿no?
sino también hay aliases >>
(>> en efecto, las deducciones anteriores están correctas – sólo que la parte Associations debiera ir antes que Alias, probablemente)
interesante también:
– quizás profundiza un día en ellos… quizás…
en resumen: me convence sobre todo por las asociaciones.