Nur von sqlite
zum Testen auf pg
geschaltet. Ich bemerkte, dass, während die Testtabelle in Ordnung löscht, die IDs nicht neu starten zu 1. Also mit anderen Worten, da der Test:Rails-Spezifikation mit Postgres-Testumgebung, Testtabellen starten ID-Inkrement nicht neu?
describe "" do
before do
# some dummy is created
Object.create()
puts "count = #{Object.count}"
puts "last object_id = #{Object.id}"
end
...
end
Wenn Sie viele Tests durchgeführt werden Sie die folgende Ausgabe :
count = 1
last object_id = 1
count = 1
last object_id = 2
count = 1
last object_id = 3
count = 1
last object_id = 4
Während ich mag das Gefühl, es ist besser, um sowohl die Test-Tabelle löschen und die ID neu starten, damit es:
count = 1
last object_id = 1
count = 1
last object_id = 1
count = 1
last object_id = 1
count = 1
last object_id = 1
ich nehme an, das ich in meiner spec_helper
Datei nur etwas brauchen? Als Referenz, aktuelle Hilfsdatei unten, und ich verwende den database_cleaner
Edelstein. Vielen Dank!
RSpec.configure do |config|
# Database cleaner set up below
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
# Clean up all jobs specs with truncation
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Normalerweise ist die ID des Objekts für den eigentlichen Test irrelevant, daher sollte das automatische Inkrementieren nicht erforderlich sein. – Rafal
Sind Sie sicher, dass Sie den Test mit der Trunkierungsstrategie ausführen? Ich würde etwas wie "beschreiben", "js: true" in der Kopfzeile Ihres Tests erwarten, also vermute ich, dass Sie den Test stattdessen mit der Transaktionsstrategie ausführen. Können Sie die Testprotokolle bei laufendem Test anzeigen? Dort sollten Sie deutlich sehen, ob es eine Transaktion "ROLLBACK" oder Trunkierung tut. – BoraMa