6

現在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 をリセットしない理由を理解したいと思います。

4

1 に答える 1