2012-04-27 10 views
6

En la última versión de FactoryGirl, algunos métodos sintácticos como Factory.create se depreciaron a favor de varios otros, más notablemente FactoryGirl.create y el más simple create.No está claro cuándo utilizar una sintaxis FactoryGirl específica

Sin embargo, la experiencia muestra que ciertas sintaxis no siempre son apropiadas dado el contexto.

Tomemos, por ejemplo:

FactoryGirl.define do 

    factory :article do 
    after_create {|a| a.comments << create(:comment) } 
    end 

    factory :comment do 
    end 

end 

Dónde Comentarios del artículo has_many y Comentarios belongs_to artículo. En las fábricas anteriores, a.comments << create(:comment) emite el error Comment(#nnn) expected, got FactoryGirl::Declaration::Static. Cambie esa línea al a.comments << FactoryGirl.create(:comment) y el error desaparece.

No está claro cuándo una sintaxis debe tener prioridad sobre cualquier otra forma.

Respuesta

5

Me enteré de que la notación abreviada no es compatible con las devoluciones de llamada (como after_create) a partir de la versión actual (3.2.0). Esta información proviene directamente de los equipos de FactoryGirl a través de grupos de Google. Actualizaré esta pregunta cuando/si se agrega en una versión futura.

+1

Eres un maldito salvavidas. Solo voy a usar la larga sintaxis. Mejore algunas pulsaciones de teclas extra que horas de eliminación de errores. –

+0

Le pregunté esto hace un año, y he estado usando el formato largo desde entonces. Sí, estoy de acuerdo, menos rasguños en la cabeza. – IAmNaN

1

Según el FactoryGirl documentation, si desea omitir el prefijo módulo factorygirl mientras llama métodos como crear y construir, es necesario mezclar en métodos factorygirl en el módulo rspec/prueba de unidad como esta:

# rspec 
RSpec.configure do |config| 
    config.include FactoryGirl::Syntax::Methods 
end 
+0

Gracias por la respuesta Salil. Sí, lo he hecho, lo que me permite usar 'create' solo en las situaciones descritas anteriormente. – IAmNaN

Cuestiones relacionadas