【问题标题】:Resetting table IDs and re-creating the test DB with Rspec on Rails使用 Rspec on Rails 重置表 ID 并重新创建测试数据库
【发布时间】:2017-03-23 23:34:43
【问题描述】:

我有各种使用 Rails 中的 FactoryGirl 创建模型的测试

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

我注意到每次运行规范套件时,它都不会重置测试架构上的表 ID(使用 Postgres)。因此,在多次执行之后,user 可能会有一个类似于2894id

我使用 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

【问题讨论】:

    标签: ruby-on-rails postgresql rspec


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2011-05-06
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多