2010-05-18 3 views
9

Wir haben ein großes Multi-Entwickler-Projekt unter Rails, in dem wir Tests für beide Modelle und Controller verwenden. Im Moment müssen die Entwickler die DB-Parameter für die "Test" -Umgebung vor dem Ausführen von Tests auf ihre lokalen Entwicklungsumgebungen einstellen. Ich frage mich, ob es eine Möglichkeit gibt, diese Tests in einer anderen Umgebung als "Test" durchzuführen.Können Can Rails Unit-Tests in einer anderen Umgebung als Test ausgeführt werden?

Zum Beispiel haben wir in database.yml:

test: 
    database: ... 
    host: ... 
    username: ... 
    password: ... 
... 
dev-one: 
    ... 
dev-two: 
    ... 

ich nichts in der Dokumentation zu diesem Thema finden kann, aber vielleicht an der falschen Stelle ich suche. Irgendwelche Ideen?

Danke!

+0

Welche Testumgebung verwenden Sie? –

+0

Wir verwenden nur die grundlegende Test :: Unit, nichts darüber hinaus. Unsere Testanforderungen sind ziemlich einfach und berühren die Steuerungslogik mehr als alles andere, aber das Framework wird es (soweit ich es beurteilen kann) nicht erlauben, Funktionstests durchzuführen, ohne die Datenbankschicht hochzufahren. Beachten Sie, dass ich nicht viel von einem Ruby/Rails-Entwickler bin, also ist das alles neu für mich ... – futureal

+0

haben Sie ein 'database.yml' für alle Entwickler? Warum lässt du nicht jeden Entwickler sein eigenes 'database.yml' erstellen? Ich würde empfehlen, verschiedene 'database.yml' für jeden Entwickler zu verwenden. – jigfox

Antwort

0

Nur eine Frage der expliziten Angabe der Umgebung, wenn Sie die Tests ausführen. Sie brauchen nur ein paar Vorbereitungen im Voraus.

Angenommen, Ihre neue Umgebung wird "testjohn" genannt (vermutlich für einen Entwickler namens John). Dann:

1- Copy config/Umgebungen/test.rb-config/Umgebungen/testjohn.rb

2- die entsprechenden DB Strophe hinzufügen config/database.yml (kopieren aus der Testzeilengruppe umbenennen, dann vermutlich den Datenbanknamen, das Passwort und andere Daten ändern). My (eher simpel) Beispiel verwendet diese:

testjohn: 
    adapter: sqlite3 
    database: db/testjohn.sqlite3 
    pool: 5 
    timeout: 5000 

3- Ihre Tests starten wie folgt:

RAILS_ENV="testjohn" rake db:migrate 
RAILS_ENV="testjohn" rake test:units 

Da übrigens RAILS_ENV nur eine Umgebungsvariable ist, können Sie ein Skript, das es setzt zuvor, oder sogar jeder Entwickler seine eigene RAILS_ENV-Variable in seiner .profile oder was auch immer Datei konfigurieren. Auf diese Weise laufen sie nur Rake-Test: Einheiten und Tests automatisch in ihrer personalisierten Umgebung ausführen.

+2

Schätzen Sie die Antwort, aber das ist genau das, was ich versucht habe und es funktioniert nicht. Die Umgebung, die Sie in RAILS_ENV angeben, wird zwar im Zusammenhang mit der Rake-Task geladen, aber sobald Ruby Ihre Tests ausführt, wechselt sie automatisch in Ihre Testumgebung und löscht die Testdatenbank und lädt Ihre Fixtures. Nach mehr Forschung scheint es, dass dieses Verhalten ziemlich tief in Test :: Unit codiert ist und ich gebe diese Möglichkeit auf. Aber immer noch sehr offen für Vorschläge. – futureal

+1

versuchte auch dies, funktioniert nicht – Joshua

Verwandte Themen