Juste commuté de sqlite
pour tester à pg
. J'ai remarqué que, alors que la table de test efface bien, les ID ne redémarrent pas 1. En d'autres termes, étant donné le test: Si vous exécutez plusieurs testsRails spec utilisant l'environnement de test Postgres, les tables de test ne redémarrent pas l'incrément d'id?
describe "" do
before do
# some dummy is created
Object.create()
puts "count = #{Object.count}"
puts "last object_id = #{Object.id}"
end
...
end
vous obtiendrez la sortie suivante :
count = 1
last object_id = 1
count = 1
last object_id = 2
count = 1
last object_id = 3
count = 1
last object_id = 4
alors que je me sens comme il vaut mieux à la fois effacer la table de test et redémarrez l'ID afin qu'il soit:
count = 1
last object_id = 1
count = 1
last object_id = 1
count = 1
last object_id = 1
count = 1
last object_id = 1
Je suppose que cela est juste quelque chose que j'ai besoin dans mon dossier spec_helper
? Pour référence, fichier d'aide actuel ci-dessous, et j'utilise le database_cleaner
gem. Merci!
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
Habituellement, l'identifiant de l'objet n'a pas d'importance pour le test réel, de sorte que la réinitialisation de l'incrémentation automatique ne devrait pas être nécessaire. – Rafal
Etes-vous sûr que vous exécutez le test à l'aide de la stratégie de troncature? Je m'attendrais à quelque chose comme 'describe" ", js: true' dans l'en-tête de votre test, donc je suppose que vous pourriez exécuter le test avec la stratégie de transaction à la place. Pouvez-vous montrer les journaux de test avec le test en cours? Là, vous devriez voir clairement s'il s'agit d'une transaction 'ROLLBACK' ou d'une troncature. – BoraMa