2016-11-10 79 views
0

我有Rails中創建一個使用FactoryGirl模型重置表ID並重新創建on Rails的使用RSpec測試DB

it "does something" do 
    user = create(:user) 
    ... 
    expect(user.name).to eq("foo") 
end 

我注意到,每一次我運行規範套件各種測試,它不會重置測試模式中的表ID(使用Postgres)。所以在執行幾次之後,user可能有一個id,類似2894

我使用Database Cleaner在後續運行之間清理我的數據庫 - 請參閱下文。

有沒有辦法在rspec運行之間直接重置表ID?我以前曾在一家公司使用過他們的應用程序,但我不知道如何。

如果#1不是選項,是否可以在運行之間刪除並重新創建測試數據庫?

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.clean_with(:deletion) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each, js: true) do 
    DatabaseCleaner.strategy = :deletion 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 
end 

回答

1

我也在使用DatabaseCleaner gem,並沒有遇到同樣的問題(儘管我使用的是mysql)。

不知道這是否有助於你的情況,但我想配置將是值得的:

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    Rails.application.load_seed 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    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 

我rails_helper.rb

require 'support/database_cleaner' 

RSpec.configure do |config| 
    config.use_transactional_fixtures = false