2016-03-15 35 views
10

Ho letto this da Thoughtbot ma continua a confondermi.Quali sono gli attributi transitori factory_girl? Perché dovrei usarne uno?

questo è il loro esempio:

factory :user do 
    transient do 
    rockstar true 
    upcased false 
    end 

    name { "John Doe#{" - Rockstar" if rockstar}" } 
    email { "#{name.downcase}@example.com" } 

    after(:create) do |user, evaluator| 
    user.name.upcase! if evaluator.upcased 
    end 
end 

create(:user, upcased: true).name 
#=> "JOHN DOE - ROCKSTAR" 

Quindi,

  1. È .upcased un vero e proprio attributo sul modello?
  2. Che cosa fa veramente il blocco transient? Impostazione delle variabili che possono quindi essere utilizzate in fabbrica?
  3. Che cos'è evaluator? Ha sempre bisogno di essere passato per ultimo? Cosa succede se la tua funzione create utilizza tratti, transienti e ha più valori?

risposta

7

Gli "attributi" transitori di factory_girl non sono affatto attributi; sono solo parametri per la chiamata al metodo di fabbrica che può essere utilizzata dal codice all'interno della fabbrica. Quindi, nel tuo esempio, no, upcased non è un attributo di modello.

Gli transient nomi di attributi 'block' degli elenchi di blocchi (ovvero le chiavi dell'hash passate al metodo factory) che sono non attributi. factory_girl li ignora quando si impostano gli attributi sull'istanza del modello appena creata a meno che non si scriva il codice nella definizione factory per dire a factory_girl di fare qualcosa con loro.

evaluator è un oggetto passato ai callback factory_girl. È sempre il secondo parametro di blocco; l'oggetto modello è sempre il primo parametro. È concettualmente come Ruby binding. Puoi chiedere il valore di qualsiasi chiave nell'hash argomento, indipendentemente dal fatto che si tratti di un attributo reale o di un 'attributo' temporaneo.

I tratti e gli attributi transitori non si influenzano a vicenda per quanto riguarda gli argomenti relativi ai metodi di fabbrica, poiché i tratti sono scalari e gli attributi transitori fanno parte dell'hash dell'argomento. Qualsiasi numero di attributi reali e 'attributi' transitori può essere nell'hash argomento.

Ecco la documentazione factory_girl per la cronaca: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md

+0

Anche ho letto la documentazione e ho avuto la stessa confusione come l'esempio non è così chiara. Grazie: +1: – rajuGT

Problemi correlati