如何在运行每个spec文件之前清理数据库?

时间:2017-01-28 16:10:19

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

我想在运行每个spec文件之前清除我的测试数据库。

我已经和工厂女孩一起使用rspec了。

谢谢, 野兔

3 个答案:

答案 0 :(得分:3)

spec_helper.rb

中添加到 config.before(:suite) do DatabaseCleaner.clean_with :truncation end config.before(:each) do DatabaseCleaner.strategy = :transaction end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end
extends Specification

必须工作

答案 1 :(得分:1)

在您的spec_helper.rb中, 在RSpec.configure块中

RSpec.configure do |config|

  # ...

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

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

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

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

  # ...
end

before(:all)和after(:all)在每个spec文件中运行,而不是在整个套件之前和之后运行。因此,对于每个规格文件,您都可以使用以下三种策略之一来清除数据库:事务,:截断,:删除

答案 2 :(得分:0)

这就是我通常为DatabaseCleaner

所做的事情
# Database Cleaner
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

这将确保每个测试都有一个干净的数据库。

结帐a related, albeit old, article by Avdi了解详情。