在rspec运行之间重置数据库

时间:2014-11-08 22:37:45

标签: ruby-on-rails rspec rspec-rails

我有这样的测试,在第一次运行后失败

it 'should have a login count of 1' do
  ... (creates a user with 'test@example.com' as the email)

  expect(user.login_count).to eq 1
end

测试失败,因为每次运行它时,该用户仍然在数据库中并且登录计数不断增加。

login_count一直在递增,因为我的程序中找到或创建用户的方法,每次都会使login_count增加1

让测试认为每次运行时数据库都清晰的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

为了在每次测试执行中在数据库中保持干净状态,您可能希望使用数据库清理器gem:https://github.com/DatabaseCleaner/database_cleaner

Rspec示例设置(从github中提取)

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

 config.around(:each) do |example|
   DatabaseCleaner.cleaning do
   example.run
 end

end