使用RSpec测试控制器时数据库不清理

时间:2014-07-02 20:34:46

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

使用RSpec测试我的模型时,我使用以下代码清理我的数据库:

config.before(:suite) do
  begin
    DatabaseCleaner.start
  ensure
    DatabaseCleaner.clean
  end
end

config.after(:suite) do
  DatabaseCleaner.clean_with(:truncation)
end

我的所有模型测试都通过,但是当我测试我的控制器时,它们似乎使用了我的模型操作的相同数据集,使我的测试错误。

我可以通过使用此代码来传递我的Controller测试:

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

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

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

然而,这导致我的模型测试失败。关于如何在不破坏一组测试或另一组测试的情况下组合这些块的任何建议?

1 个答案:

答案 0 :(得分:1)

您没有提及database_cleaner的任何特定版本,也没有提及您的数据库。但是RSpec中database_cleaner的最新配置使用了一个around过滤器

https://github.com/DatabaseCleaner/database_cleaner#rspec-example