我的 Rails 3.1 应用程序中有以下 spec_helper.rb 文件。我正在使用 Spork 更快地加载环境进行测试。在将 Spork 添加到混合物中之前,我的所有测试都有效。添加 spork 后,测试数据库在测试运行之间没有得到正确清除,这超出了我的一些期望。
按照其他说明,我将 database_cleaner 添加到下面列出的代码中;但是,现在,开发数据库和测试数据库都在清理。ENV["RAILS_ENV"] 调用在此调用期间返回测试。
有没有办法明确限制对 DatabaseCleaner.clean_with(:truncation) 的调用只影响测试数据库?
require 'rubygems'
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'shoulda/matchers/integrations/rspec'
require 'database_cleaner'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.mock_with :mocha
config.formatter = 'documentation'
config.use_transactional_fixtures = true
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
end
Spork.each_run do
FactoryGirl.reload
end
更新:这是我的 database.yml 文件
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
此外,我通过将 clean_with 调用移动到 before(:each) 部分来解决基本问题,但这会显着减慢测试运行速度。