Nach einer umfangreichen Fehlerbehebung stellte ich fest, dass ich rake spec
einmal ausführen musste (ich kann mit control-c abbrechen), bevor ich rspec direkt ausführen konnte (z. B. für eine Teilmenge unserer Spezifikationen). Wir verwenden Rails 3.0.7 und RSpec 2.5.0.
Es ist klar, dass Rake einige wichtige Datenbank-Setup-Aufgaben / -Code ausführt (wir haben benutzerdefinierten Code in den Rakefile-Rails der Root-Ebene und möglicherweise an anderen Stellen).
Wie kann ich die Setup-Aufgaben / den Code für die Rake-Test-Datenbank ausführen, ohne sie auszuführen rake spec
?
Zusätzlich zur Möglichkeit, rspec für eine Teilmenge von Dateien auszuführen , verwende ich specjour , um unsere Spezifikationen auf mehrere Kerne zu verteilen (ich hatte noch keinen Erfolg damit, sie über das LAN zu verteilen), aber ich sehe dasselbe Verhalten wie beim Ausführen von rspec direkt: Ich muss rake spec
auf jeder Testdatenbank (unter der Annahme von zwei Kernen) ausgeführt werden, bevor specjour funktioniert:
rake spec TEST_ENV_NUMBER=1
control-c (after tests start)
rake spec TEST_ENV_NUMBER=2
control-c (after tests start)
specjour
Hinweis: Meine config / database.yml hat diesen Eintrag zum Testen (wie es für die Edelsteine des parallelen Testens üblich ist):
test:
adapter: postgresql
encoding: unicode
database: test<%=ENV['TEST_ENV_NUMBER']%>
username: user
password:
parallel_tests scheint seine Datenbanken korrekt einzurichten, aber viele unserer Spezifikationen schlagen fehl.
Ich sollte auch erwähnen, dass das Ausführen specjour prepare
dazu führt, dass Postgres Fehler protokolliert, bei denen die Datenbanken nicht gefunden werden können, diese jedoch erstellt werden (ohne Tabellen). Bei einem nachfolgenden Lauf werden keine Fehler protokolliert, aber auch keine Tabellen erstellt. Es ist möglich, dass mein gesamtes Problem einfach ein Fehler ist prepare
, also habe ich es auf Github gemeldet.
Ich denke, dass ich beliebigen Code in jeder Specjour-Testdatenbank ausführen kann, indem ich Specjour::Configuration.prepare
.specjour / hooks.rb einstelle. Wenn also Rake-Tasks oder anderer Code ausgeführt werden müssen, funktioniert dieser möglicherweise dort.