現在DatabaseCleaner
、Rails プロジェクトで PostgreSQL を実行して使用しており、以下のように設定しています。
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation, { pre_count: true, reset_ids: true })
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Rails テスト スイートの 1 つで、インスタンスの ID を出力しました。clean_with(:truncate) はデータベースをクリアしてバキュームを実行すると想定しているため、比較的小さい数値である必要があると思います。しかし、テストを実行するたびに増加します。
テストはパスし、使用するシーケンスは関係ありません。しかし、なぜ本来clean_with(:truncation)
の方法で機能しないのでしょうか?
======編集======
これは RSpec テストの範囲内です。シーケンス番号付けがパフォーマンスに影響を与えないことは理解していますが、各 :suite で高価なクリーニング (:truncation) を使用し、安価で迅速なクリーニング (:transaction) を使用すると影響があります。clean_with(:truncation)
テストスイートを実行する前に、きれいなデータベース状態を取得するために id をリセットしない理由を理解したいと思います。