ruby-on-rails-3 – Spork,RSpec和database_cleaner销毁开发数据库

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – Spork,RSpec和database_cleaner销毁开发数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的Rails 3.1应用程序中有以下spec_helper.rb文件.我正在使用Spork加载环境以便进行测试.在将Spork添加到混合物之前,我的所有测试都有效.添加spork之后,测试数据库在测试运行之间没有得到适当的清除,这导致了我的一些期望.

按照其他说明,我将database_cleaner添加到下面列出的代码中;但是,现在,开发数据库以及测试数据库正在被清理. ENV [“RAILS_ENV”]呼叫在此呼叫期间返回测试.

有没有办法明确限制对DatabaseCleaner.clean_with(:truncation)的调用只影响测试数据库

  1. require 'rubygems'
  2. require 'spork'
  3.  
  4. Spork.prefork do
  5. ENV["RAILS_ENV"] ||= 'test'
  6. require File.expand_path("../../config/environment",__FILE__)
  7. require 'rspec/rails'
  8. require 'shoulda/matchers/integrations/rspec'
  9. require 'database_cleaner'
  10.  
  11. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
  12.  
  13. RSpec.configure do |config|
  14. config.mock_with :mocha
  15.  
  16. config.formatter = 'documentation'
  17. config.use_transactional_fixtures = true
  18.  
  19. config.before(:suite) do
  20. DatabaseCleaner.strategy = :truncation
  21. end
  22.  
  23. config.before(:each) do
  24. DatabaseCleaner.start
  25. end
  26.  
  27. config.after(:each) do
  28. DatabaseCleaner.clean
  29. end
  30. end
  31. end
  32.  
  33. Spork.each_run do
  34. FactoryGirl.reload
  35. end

更新:这是我的database.yml文件

  1. development:
  2. adapter: sqlite3
  3. database: db/development.sqlite3
  4. pool: 5
  5. timeout: 5000
  6.  
  7. test:
  8. adapter: sqlite3
  9. database: db/test.sqlite3
  10. pool: 5
  11. timeout: 5000
  12.  
  13. production:
  14. adapter: sqlite3
  15. database: db/production.sqlite3
  16. pool: 5
  17. timeout: 5000

此外,我通过将clean_with调用移动到before(:each)部分来解决基本问题,但这会显着减慢测试运行速度.

解决方法

您是否尝试将ENV [“RAILS_ENV”] || =’test’移出Spork.prefork块?

您确定Spork导致您的数据库未清理吗?如果您正在使用RSpec的事务性工具,那么唯一可能导致这种情况的是在before(:all)块中使用工厂.您可以在after(:all)块中清理数据并删除DatabaseCleaner.

顺便说一句,如果您使用截断策略,则无需运行DatabaseCleaner.start.

猜你在找的Ruby相关文章