2011-03-03 18 views
57

Qual è lo scopo di Factory Girl nei test rspec quando potrei usare i blocchi before(:each)? Sembra che l'unica differenza tra Factory Girl e uno before(:each) è che la fabbrica prepara la creazione dell'oggetto al di fuori del test. È giusto?Factory Girl: qual è lo scopo?

+0

Questo è il modo di interagire con factorygirl ActiveReccord https://cbabhusal.wordpress.com/2015/04/21/ruby-on-rails-factory -girl-how-it-interacts-with-activerecord/ – illusionist

risposta

59

gemme come Factory Girl e Sham consentono di creare modelli per oggetti validi e riutilizzabili. Sono stati creati in risposta a fixture che registravano i record fissi che dovevano essere caricati nel database. Consentono una maggiore personalizzazione quando istanziate gli oggetti e mirano a garantire di avere un oggetto valido con cui lavorare. Possono essere utilizzati ovunque nei test e nei ganci test prima e dopo.

prima (: each), before (: all), after (: each) e after (: all) mirano tutti a fornire un luogo per l'impostazione e il teardown che verranno condivisi tra un gruppo di test. Ad esempio, se stai per creare un nuovo utente valido per ogni singolo test, allora dovrai farlo nel tuo hook precedente (: each). Se stai cancellando alcuni file dal filesystem, vuoi farlo in un hook precedente. Se i tuoi test creano tutti un file tmp e vuoi rimuoverlo dopo il test, lo farai nel tuo after (: each) o after (: all) hook.

I modi in cui questi due concetti differiscono è che le fabbriche non sono mirate a creare aggancio ai test, sono finalizzate alla creazione di oggetti e record Ruby validi, in modo da poter mantenere la creazione di oggetti flessibile e ASCIUTTA. Prima e dopo i ganci sono finalizzati alle attività di installazione e smontaggio che sono condivise in un gruppo di esempio in modo da poter mantenere il proprio codice di installazione e cancellazione DRY.

+7

Un altro modo per dirlo: uno factory FactoryGirl è come una funzione 'give_me_a_valid_model'. Se ne avrai bisogno in più di un "prima": ogni "blocco", ti farà risparmiare alcune ripetizioni. Più complicato è impostare quel modello valido (associazioni, garantendo valori unici, ecc.), Maggiore è lo sforzo che ti salva. –

17

FactoryGirl sostituisce i dispositivi nei test. In questo modo, non sarà necessario mantenere aggiornati i dispositivi man mano che si modifica il modello dati. Le fixture possono anche diventare poco maneggevoli quando si aggiungono altri casi limite.

FactoryGirl genera dati al volo e aggiungere e rimuovere campi è molto più semplice. Inoltre, puoi usarlo nella configurazione come useresti le fixture.

Questo lo rende più chiaro?

+2

Mi ci è voluto un po 'per capire che le fabbriche sono una sostituzione "intelligente" per i dispositivi. Sono ancora interessato a saperne di più sulle distinzioni tra mock e stub. – Docunext

+0

Di sicuro sì, grazie. :) Buono a sapersi, sono un buon sostituto per i dispositivi. E 'stato un po' strano perché i tutorial di Hartl (che sono buoni, btw) entrano ed escono tra le fixture e Factory girl. Che mi sono trovato confuso. Ora che lo so, probabilmente lo userò più spesso. :) – curiousdork

6

Anche le definizioni dei dispositivi sono globali nell'intera applicazione. Le fabbriche possono essere locali, quindi i dati specifici per un caso di test isolato si trovano nel setup per quel particolare contesto e non in un singolo file di fixture globale.

This book copre l'argomento molto bene se volete un po 'di più la lettura importa

Problemi correlati