2017-05-05 4 views
0

試験用にsqliteからpgに切り替えました。私はテスト与えられ、テストテーブルだけで罰金をクリアしながら、IDがつまりそう1に再起動していない、ということに気づい:Postgresテスト環境を使用したRails仕様では、テストテーブルはIDの増分を再起動しませんか?

describe "" do 
    before do 
    # some dummy is created 
    Object.create() 
    puts "count = #{Object.count}" 
    puts "last object_id = #{Object.id}" 
    end 
    ... 
end 

あなたは多くのテストを実行する場合は、次のような出力が得られます:

count = 1 
last object_id = 1 
count = 1 
last object_id = 1 
count = 1 
last object_id = 1 
count = 1 
last object_id = 1 

私はこれは私が私のspec_helperファイルに必要なだけのものですと仮定します。

count = 1 
last object_id = 1 
count = 1 
last object_id = 2 
count = 1 
last object_id = 3 
count = 1 
last object_id = 4 

私はそれをテストテーブルをクリアし、それはだように、IDを再起動し、両方に優れていたいと感じる一方で?参考までに、現在のヘルパーファイルは以下の通りです。私はdatabase_cleaner gemを使用しています。ありがとう!

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 
+0

通常、オブジェクトのIDは実際のテストとは無関係です。したがって、自動インクリメントをリセットする必要はありません。 – Rafal

+0

切り捨て戦略を使用してテストを実行していますか?テストのヘッダーに 'describe" "、js:true"のようなものがあると思いますので、代わりにトランザクション戦略でテストを実行している可能性があります。テスト実行中にテストログを表示できますか?トランザクションROLLBACKまたはトランケートを行うかどうかを明確に確認する必要があります。 – BoraMa

答えて

0

それが動作していない理由ですおそらく8.4下記のおpsqlバージョンは。
psql --versionでバージョンを調べ、データベースクリーナーのソースから8.4以上が必要です。

@restart_identity ||= db_version >= 80400 ? 'RESTART IDENTITY' : '' 

私は9.6.2を動作させていますが正常です。

> truncate users restart identity; 
> insert into users (x) values (1); 
> select * from users ; 

# id | x 
# ----+--- 
# 1 | 1 

データベースクリーナーも正常に動作することを確認してください。

require 'rails/all' 
require 'database_cleaner' 
ActiveRecord::Base.establish_connection('postgres://localhost/test1') 
class User < ActiveRecord::Base; end 
User.count 
# => 1 
DatabaseCleaner.clean_with(:truncation, reset_ids: true) 

シリアル列をリセットします。

$ psql -d test1 
> insert into users (x) values (1); 
> select * from users ; 

# id | x 
# ----+--- 
# 1 | 1 
+0

nah ...私はちょうど今日インストールされているので、あなたと同じバージョンを持っている、探し続けるだろう – james

関連する問題