【发布时间】:2017-06-14 04:38:48
【问题描述】:
我想在运行每个规范文件之前清除我的测试数据库。
我已经在工厂女孩中使用 rspec。
谢谢, 野兔
【问题讨论】:
-
你在使用
database_cleanergem吗? -
是的,我正在使用它。但不确定如何为每个文件编写。
标签: ruby-on-rails ruby rspec rspec-rails database-cleaner
我想在运行每个规范文件之前清除我的测试数据库。
我已经在工厂女孩中使用 rspec。
谢谢, 野兔
【问题讨论】:
database_cleaner gem吗?
标签: ruby-on-rails ruby rspec rspec-rails database-cleaner
在您的 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) 对每个规范文件运行,而不是在整个套件之前和之后运行。因此,对于每个规范文件,您都可以使用以下三种策略中的任何一种来清除数据库:transaction、:truncation、:deletion
【讨论】:
这是我通常为 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 了解更多信息。
【讨论】:
添加到您的spec_helper.rb 中的RSpec.configure 块
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
必须工作
【讨论】:
before :each? before :suite 还不够吗?