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:

  • secuencias >> (se entiende por qué factory)
  • callbacks >>
  • inicialización masiva >>

– quizás profundiza un día en ellos… quizás…

en resumen: me convence sobre todo por las asociaciones.

El sitio utiliza cookies, para iniciar sesión o para cotizar los servicios. No usamos cookies de terceros.    Leer más
Privacidad