2010-09-10 17 views
7

Ich denke daran, meine Gurken-Tests auf meiner Rails-App laufen, wenn es auf Heroku läuft. Ist dies eine vernünftige Methode, um Unterschiede zwischen Entwicklungsumgebung und Implementierungsumgebung zu überprüfen?Führen Sie Gurken-Tests auf Heroku

Hat jemand Erfahrung mit dieser Art von Szenario? Rake -T sagt mir "Gurke Rake Aufgabe nicht verfügbar (Gurke nicht installiert)" obwohl ich Gurkenschienen in meiner .Gems-Datei angegeben habe. Komme ich das aus dem falschen Winkel?

Irgendwelche Ideen oder Vorschläge?

Antwort

0

Ist der cucumber Edelstein auch in Ihrem Gem manifest?

1

Das würde die Erstellung, Änderung und anschließende Entfernung einer Test-Datenbank erfordern, und da Heroku die database.yml-Datei ignoriert, wäre dies überhaupt nicht möglich.

Sie können versuchen, Ihre Anwendung in der Testumgebung ausgeführt wird, indem es in der Konsole einstellen, und dann können Sie in der Lage Tests laufen

heroku config:add RACK_ENV=test 

aber auch wenn Sie diese Arbeit machen zu verabschieden, um Ihre Produktionsdatenbank, da ich mir ziemlich sicher bin, dass Heroku die Datei "database.yml" wieder überschreibt und die Datenbank verwendet, die der App automatisch zugewiesen wurde.

Sie können auch ein second app on Heroku nur zum Testen erstellen.

3

Sie können eine separate Heroku-Instanz verwenden und Ihre App dort bereitstellen. Sie sollten dann in der Lage sein, Ihre Tests über Heroku Rake durchzuführen.

Sie können den Parameter --app in der heroku-Befehlszeile verwenden, um auszuwählen, auf welcher Instanz Befehle ausgeführt werden sollen. Löschen Sie Ihre Produktdatenbank nicht aus Versehen.

0

Da Tests direkt auf Heroku nicht so trivial zu sein scheinen, habe ich den lokalen Test auf die Heroku-App umgeleitet, indem ich HTTParty-Anrufe anstelle von normalen Capybara-Anrufen verwendet habe.

Das kann gut funktionieren, zumindest für Integrationstests.

Zum Beispiel ist dies die Methode I in Schritt Definitionen verwenden, wenn herkömmliche lokale Tests gegen die lokale Anwendung ausgeführt wird:

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

und dies ist das Verfahren I verwendet werden, wenn die lokalen Tests gegen den App Heroku ausgeführt wird:

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 

ich das eine oder andere in die Gurke Welt geladen werden, basierend auf einer bestimmten Option übergeben sich in einem entsprechenden Profil Gurke und eingestellt (so, dass ich einfach cucumber -p heroku anrufen kann, wenn ich gegen Heroku testen möchten).

Natürlich im zweiten Fall muss ich auch kümmern uns vor jedem Szenario die Heroku Datenbank initialisieren, ruft zum Beispiel so etwas wie dies in einem ‚vor‘ Haken:

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 
Verwandte Themen