8

FactoryGirl no configurará mi atributo protegido user.confirmed. ¿Cuál es la mejor práctica aquí?Configuración de atributos protegidos con FactoryGirl

Factory.define :user do |f| 
    f.name "Tim"   # attr_accessible -- this works 
    f.confirmed true  # attr_protected -- doesn't work 
end 

puedo hacer un @user.confirmed = true después de usar mi fábrica, pero eso es un montón de repetición a través de una gran cantidad de pruebas.

Respuesta

10

El uso de un gancho after_create funciona:

Factory.define :user do |f| 
    f.name "Tim" 
    f.after_create do |user| 
    user.confirmed = true 
    user.save 
    end 
end 
+2

Gran hallazgo. La versión más reciente de factory girl cambió la sintaxis a 'after (: create)'. Ver [guía de inicio] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) –

3

Tendría que pasarlo al hash cuando cree el usuario, ya que FactoryGirl lo protege de la asignación masiva.

user ||= Factory(:user, :confirmed => true) 
+0

gracias - acabo de probar esto y no funcionó – brittohalloran

+2

Funciona para mí en FactoryGirl 2.1.0. – iwasrobbed

+0

Estoy usando 2.3.2, por lo que podría ser, pero parece poco probable – brittohalloran

0

Otro enfoque es utilizar rieles construido en papeles como esto:

#user.rb 
attr_accessor :confirmed, :as => :factory_girl 

Cuando la masa-asignación de emisiones factorygirl este papel, haciendo este patrón es posible

Pros: mantiene fábricas rápida, sencilla y limpia (menos código en devoluciones de llamada)
Contras: va a cambiar el código de modelo para sus pruebas :(

Algunas sugerencias probadas para abordar el Con .:

  • Se podría volver a abrir la clase justo por encima de su fábrica de
  • Se podría volver a abrir la clase en una [prueba | spec] _helper
Cuestiones relacionadas