2012-04-27 8 views
6

Nell'ultima versione di FactoryGirl, alcuni metodi sintattici come Factory.create sono stati deprezzati a favore di molti altri, in particolare FactoryGirl.create e il più semplice create.Non chiaro quando utilizzare una sintassi FactoryGirl specifica

Tuttavia, l'esperienza mostra che certe sintassi non sono sempre appropriate dato il contesto.

Prendiamo ad esempio:

FactoryGirl.define do 

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

    factory :comment do 
    end 

end 

caso di applicazione dell'articolo has_many commenti, e commenti belongs_to articolo. Negli impianti sopra indicati, a.comments << create(:comment) emette l'errore Comment(#nnn) expected, got FactoryGirl::Declaration::Static. Cambia quella linea in a.comments << FactoryGirl.create(:comment) e l'errore scompare.

Non è chiaro quando una sintassi dovrebbe avere la precedenza su qualsiasi altra forma.

risposta

5

Ho appreso che la notazione abbreviata non è supportata nei callback (come after_create) a partire dalla versione corrente (3.2.0). Questa informazione proviene direttamente dai team FactoryGirl tramite gruppi Google. Aggiornerò questa domanda quando/se sarà aggiunta in una versione futura.

+1

Sei un dannato salvatore. Sto solo andando a usare la sintassi lunga. Migliori sequenze di tasti in più rispetto alle ore di debug senza tracce. –

+0

L'ho chiesto un anno fa e ho utilizzato la forma lunga da allora. Sì, sono d'accordo, molto meno grattando la testa. – IAmNaN

1

Come per la FactoryGirl documentation, se si vuole omettere il prefisso del modulo di factorygirl mentre chiama metodi come creare e costruire, è necessario mescolare-in metodi factorygirl nel modulo rspec/test-unit come questo:

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

Grazie per la risposta Salil. Sì, l'ho fatto, il che mi permette di usare 'create' solo nelle situazioni sopra descritte. – IAmNaN

Problemi correlati