2012-02-21 7 views
5

Come esercizio di apprendimento, sto costruendo un'applicazione di pratica con Sinatra, Datamapper e RSpec. Sto usando this template, che è fondamentalmente un boilerplate per tutto quanto sopra.Separare il database di test dell'app Sinatra dal database di sviluppo?

Il problema che sto avendo è che il modo in cui RSpec e Datamapper sembrano essere configurati, ogni volta che viene eseguita una specifica che verifica la funzionalità relativa al Database, tali test modificano direttamente il mio database di sviluppo invece di un database di test.

Per esempio, vorrei creare un paio di oggetti di database prima di eseguire il resto della spec ...

before(:all) { 
    Region.new(:country => "Canada", :country_code => "CA").save 
    ProductLine.new(:reference => "Molders").save 
    Product.new(:name => "The Black Molder").save 
    Cart.new(:price => 25.95).save 
} 

Eppure ogni volta che corro RSpec, gli elementi di cui sopra vengono aggiunti al mio database di sviluppo.

Perché non viene generato un database di test? Come posso far funzionare correttamente il database di test?

Questo sembra abbastanza simile a this issue here, ad eccezione di Sinatra anziché di Rails.

Se c'è qualche aiuto, il mio codice può essere visto here.

risposta

16

In spec_helper.rb file che si sta richiedendo my_app.rb di file che a sua volta richiede db.rb per configurare il database, ma questo accade prima di chiamare set :environment, :test, in modo che il blocco configure :test non è in esecuzione (l'ambiente è lo sviluppo di default a quel palco).

Ovviamente non è possibile chiamare set environment :test prima di richiedere Sinatra, ma è possibile impostare la variabile di ambiente RACK_ENV, che Sinatra controlla quando imposta il proprio ambiente.

Quindi, per assicurarsi che si sta in esecuzione in ambiente di test, aggiungere questo in cima spec_helper.rb (o da qualche altra parte a inizio i test, ma prima hai bisogno di Sinatra):

ENV['RACK_ENV'] = 'test' 

È potrebbe quindi rimuovere la riga set :environment, :test in quanto è ora ridondante.

È simile all'altra domanda a cui si fa riferimento, ma le app rack utilizzano RACK_ENV anziché RAILS_ENV.

+0

Ehi, questo ha fatto il trucco! Grazie per la risposta :) –

+1

Grazie, stavo mettendo ENV ['RACK_ENV'] = 'test'' in vari punti e mi sono sentito frustrato dal motivo per cui non lo stava raccogliendo - dopo aver letto la tua risposta l'ho messo a la parte superiore di 'spec_helper.rb' ** prima di **' richiede 'sinatra'' e ora funziona! – Shevaun

+0

Grazie mille. Questo mi stava facendo impazzire. –

Problemi correlati