2010-09-10 6 views
7

Sto pensando di eseguire i miei test di cetriolo sulla mia app per rails quando è in esecuzione su heroku. È un modo corretto per verificare le differenze tra l'ambiente di sviluppo e l'ambiente di distribuzione?Esegui test di cetriolo su heroku

Qualcuno ha esperienza di questo tipo di scenario? Rake -T mi dice "compito cetriolo non disponibile (cetriolo non installato)" anche se ho specificato le rotaie di cetriolo nel mio file .gems. Mi sto avvicinando a questo dall'angolo sbagliato?

Qualche idea o suggerimento?

risposta

0

La gemma cucumber si trova anche nel tuo manifest Gemma?

1

Ciò richiederebbe la creazione, la modifica e la successiva rimozione di un database di test e poiché Heroku ignora il file database.yml, ciò non sarebbe affatto possibile.

Si può provare in esecuzione la vostra applicazione nell'ambiente di test impostandolo nella console, e allora si può essere in grado di eseguire i test

heroku config:add RACK_ENV=test 

, ma anche se si ottiene questo lavoro, dire addio al vostro database di produzione poiché sono abbastanza sicuro che Heroku eseguirà nuovamente l'override di database.yml e utilizzerà il database assegnato automaticamente alla tua app.

Si può anche considerare di creare un second app on Heroku solo per il test.

3

È possibile utilizzare un'istanza Heroku separata e distribuire l'app lì. Dovresti quindi essere in grado di eseguire i test tramite heroku rake.

È possibile utilizzare il parametro --app sulla riga di comando heroku per scegliere su quale istanza eseguire i comandi. Basta non cancellare il tuo database di prod per sbaglio.

0

Poiché i test eseguiti direttamente su Heroku non sembrano così banali, ho fatto ricorso a test locali sull'app Heroku, utilizzando le chiamate HTTParty invece delle solite chiamate Capybara.

Questo può funzionare bene, almeno per i test di integrazione.

Ad esempio, questo è il metodo che uso nelle definizioni passo durante l'esecuzione di test locali convenzionali contro l'applicazione locale:

def my_http_request(httpmethod, path, body = '') 
    send httpmethod, path, body 
    end 

e questo è il metodo che uso durante l'esecuzione test locali contro l'applicazione Heroku:

def my_http_request(httpmethod, path, body = '') 
    options = body.blank? ? { :headers => {"Content-Length" => "0"} } : { :body => body } 
    @last_response = HTTParty.send httpmethod, 'https://lit-*****-6305.herokuapp.com' + path, options 
    end 

che carico uno o l'altro nel mondo cetriolo, sulla base di una specifica opzione passata a cetriolo stesso e impostare in un profilo rilevante (in modo che io posso semplicemente chiamare cucumber -p heroku quando voglio confrontare con Heroku).

Naturalmente, nel secondo caso devo anche a prendersi cura di inizializzazione del database Heroku prima di ogni scenario, chiamando per esempio qualcosa di simile in un 'prima' gancio:

def start_my_heroku_tests 
    @@db = PGconn.open(:host => 'ec2-54-**-****-44.compute-1.amazonaws.com', :port => 5432, :dbname => 'd4d********rmi4k', :user => 'llcm*******jcyh', :password => '7FN_************gcxq') 
    @@db.exec "TRUNCATE sources" 
    @@db.exec "TRUNCATE posts" 
    end