Creazione / Ricreazione di un record generato dalla migrazione nel database di test con RSpec

StackOverflow https://stackoverflow.com/questions/270969

  •  06-07-2019
  •  | 
  •  

Domanda

Ho una migrazione in Rails che inserisce un record nel database. Il modello di categoria dipende da questo record. Poiché RSpec cancella il database prima di ogni esempio, questo record viene perso e inoltre non sembra mai essere creato poiché RSpec non sembra generare il database dalle migrazioni. Qual è il modo migliore per creare / ricreare questo record nel database? Utilizzerebbe prima (: all)?

È stato utile?

Soluzione

Non è che RSpec cancella il database, è che il rake di Rails: db: prepara l'attività copia lo schema (ma non il contenuto) del tuo database di sviluppo nel tuo * _test db.

Sì, puoi usare prima (: all) , poiché le transazioni sono racchiuse in ogni singolo esempio - ma un semplice file fixture farebbe lo stesso lavoro.

(Esiste una soluzione generale più complicata a questo problema: passare a un'architettura orientata ai servizi, in cui i servizi 'dev' e 'test' saranno istanze completamente separate. È quindi possibile puntare la configurazione del test db al database di sviluppo nel tuo servizio di test, disabilita rake: db: prepara e crea il tuo servizio di test dalle migrazioni mentre lo rigeneri. Quindi puoi testare le tue migrazioni e trasformazioni di dati.)

Altri suggerimenti

Quello che mi piace fare è creare una cartella in db / migrazione chiamata data, e poi inserire lì i dispositivi yml, nel tuo caso categorie.yml

Quindi creo una migrazione con la seguente

def self.up
 down
 directory = File.join( File.dirname(__FILE__), "data" )
 Fixtures.create_fixtures( directory, "categories" )
end

def self.down
  Category.delete_all
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top